Off Topic - <BASE_DATO_PL/SQL_CONSULTAS_SALIDAS/>

 
Vista:
Imágen de perfil de anyelo

<BASE_DATO_PL/SQL_CONSULTAS_SALIDAS/>

Publicado por anyelo (2 intervenciones) el 06/07/2021 05:01:02
Hola a todos en este Foro, quisiera saber si alguien por acá me puede ayudar a realizar unos ejercicios de practica que no me terminan de salir correctamente.

Dejo la información respectiva y si alguien se anima será bacán.

Las tablas son las siguientes:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
Create table Ciudad (
	Ciu_Id Number NOT NULL ,
	Nombre Varchar2 (30),
primary key (Ciu_Id)
)
/
 
Create table Departamento (
	Depto_Id Number NOT NULL ,
	Nombre Varchar2 (30),
	Direccion Varchar2 (30),
	Ciu_Id Number NOT NULL ,
primary key (Depto_Id)
)
/
 
Create table Empleado (
	Rut Varchar2 (10) NOT NULL ,
	Nombre Varchar2 (30),
	Sexo char(1),
	Salario Number,
  Bono number,
	Fecha_Contrato Date,
	Depto_Id Number NOT NULL ,
	Car_Id Number NOT NULL ,
primary key (Rut)
)
/
 
Create table Proyecto (
	Proy_Id Number NOT NULL ,
	Nombre Varchar2 (30),
	Fecha_Inicio Date,
	Fecha_Termino Date,
	Depto_Id Number NOT NULL ,
primary key (Proy_Id)
)
/
 
Create table Cargo (
	Car_Id Number NOT NULL ,
	Nombre Varchar2 (30),
	Sueldo_Minimo Number,
	Sueldo_Maximo Number,
primary key (Car_Id)
)
/
 
Create table Proy_Detalle (
	Proy_Id Number NOT NULL,
	Rut Varchar2 (10)
)
/
 
 
-- Create Foreign keys section
 
Alter table Departamento add  foreign key (Ciu_Id) references Ciudad (Ciu_Id)
/
 
Alter table Empleado add  foreign key (Depto_Id) references Departamento (Depto_Id)
/
 
Alter table Proyecto add  foreign key (Depto_Id) references Departamento (Depto_Id)
/
 
Alter table Proy_Detalle add  foreign key (Rut) references Empleado (Rut)
/
 
Alter table Proy_Detalle add  foreign key (Proy_Id) references Proyecto (Proy_Id)
/
 
Alter table Empleado add  foreign key (Car_Id) references Cargo (Car_Id)
/
 
Insert into ciudad values (1,'Santiago');
Insert into ciudad values (2,'Melipilla');
Insert into ciudad values (3,'Concepción');
Insert into ciudad values (4,'Viña del Mar');
 
insert into departamento values (10,'Gerencia','Republica 1234',1);
insert into departamento values (20,'Ventas','11 Oriente N° 234',3);
insert into departamento values (30,'IT','Los Lirios s/n',2);
insert into departamento values (40,'Producción','Los Mares 777',4);
 
insert into cargo values (1,'Gerente General',4000000,7000000);
insert into cargo values (2,'Gerente Ventas',2000000,4000000);
insert into cargo values (3,'Generente IT',3000000,4000000);
insert into cargo values (4,'Gerente Produccion',2000000,3000000);
insert into cargo values (5,'Jefe Producción',1000000,2000000);
insert into cargo values (6,'Operario Manual',400000,1000000);
insert into cargo values (7,'Operario Mecánico',500000,1500000);
insert into cargo values (8,'Ingeniero en Informática',1000000,2500000);
insert into cargo values (9,'Ingeniero de Sistemas',1200000,3000000);
insert into cargo values (10,'Analista Programador',600000,1000000);
 
insert into empleado values ('15959240-5','Araya Antonio','M',5500000,0,'25/06/1990',10,1);
insert into empleado values ('16149824-6','Dominguez Maria','F',2200000,0,'01/03/1995',20,2);
insert into empleado values ('16323869-1','Garces Alberto','M',2000000,0,'01/01/2000',30,3);
insert into empleado values ('16639380-9','Jáuregui Sebastián','M',4000000,0,'15/06/2010',40,4);
insert into empleado values ('17021716-0','Legrand Gaspar','M',1500000,0,'30/03/2010',40,5);
insert into empleado values ('15933037-0','Meza Ignacio','M',800000,0,'15/09/2011',40,6);
insert into empleado values ('15930814-6','Molinet Lucia','F',1000000,0,'01/10/2009',40,7);
insert into empleado values ('15275596-1','Mora Alejandro','M',2000000,0,'20/12/1998',30,9);
insert into empleado values ('16472673-8','Perez Alejandro','M',700000,0,'05/05/2007',30,10);
insert into empleado values ('15790941-K','Riquelme Andres','M',900000,0,'01/08/2009',30,10);
insert into empleado values ('16031677-2','Torres Francisco','M',1300000,0,'02/11/2011',30,10);
 
insert into proyecto values (1,'Control de Existencia','01/01/2018','01/05/2018',20);
insert into proyecto values (2,'Sistema de Remuneración','10/03/2018','09/09/2018',30);
insert into proyecto values (3,'Sistema de Producción','20/03/2018','30/08/2018',40);
 
insert into proy_detalle values (1,'15275596-1');
insert into proy_detalle values (1,'16323869-1');
insert into proy_detalle values (1,'15790941-K');
insert into proy_detalle values (2,'15275596-1');
insert into proy_detalle values (2,'15790941-K');
insert into proy_detalle values (3,'16472673-8');
insert into proy_detalle values (3,'16323869-1');
insert into proy_detalle values (3,'16031677-2');
/
commit;

Bueno acá en imagen dejo el contexto, modelo entidad relacion, como quedan las tablas al consultarlas, y los casos que hay que desarrollar.

Gracias por la atención de ante mano.


<Saludos a todos por aca/>

caso_
caso_2
modelo_entidad_relacion
tablas_ciudad_departamento
tabla_cargo_empleado_proyecto
tabla_proy_detalle
consultas_con_salidas_asidebequedar_primeraparte
pl_sql_2
pl_sql_22
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Consultas SQL y PL/SQL (IT 2020)

Publicado por Alejandro (58 intervenciones) el 06/05/2026 00:07:48
A continuación van soluciones para cada enunciado (1.1, 1.2, 1.3, 2.1 y 2.2) usando tu modelo/tablas (Oracle).

---

1.1 Cantidad de empleados por proyecto (ordenado por proyecto)



1
2
3
4
5
6
7
8
9
SELECT
  p.proy_id,
  p.nombre AS nombre_proyecto,
  COUNT(pd.rut) AS cantidad_empleados
FROM proyecto p
LEFT JOIN proy_detalle pd
  ON pd.proy_id = p.proy_id
GROUP BY p.proy_id, p.nombre
ORDER BY p.proy_id;

> `LEFT JOIN` incluye proyectos aunque no tengan empleados (cuenta 0).

---

1.2 Listado por departamento con antigüedad (rut, nombre, salario, fecha, años, depto)



1
2
3
4
5
6
7
8
9
10
11
SELECT
  e.rut,
  e.nombre,
  e.salario,
  e.fecha_contrato,
  TRUNC(MONTHS_BETWEEN(SYSDATE, e.fecha_contrato)/12) AS anios_trabajados,
  d.nombre AS nombre_departamento
FROM empleado e
JOIN departamento d
  ON d.depto_id = e.depto_id
ORDER BY d.nombre, e.fecha_contrato;

---

1.3 Auditoría: Gerentes con sueldo_máximo >= 2.000.000 (mostrar rut, nombre, salario, cargo, min, max)



1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
  e.rut,
  e.nombre,
  e.salario,
  c.nombre AS cargo,
  c.sueldo_minimo,
  c.sueldo_maximo
FROM empleado e
JOIN cargo c
  ON c.car_id = e.car_id
WHERE UPPER(c.nombre) LIKE 'GERENTE%'
  AND c.sueldo_maximo >= 2000000
ORDER BY c.nombre, e.nombre;

---

2.1 Bloque PL/SQL: promedio sueldo_minimo, actualizar +5%, nuevo promedio (mostrar ambos)



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SET SERVEROUTPUT ON;
 
DECLARE
  v_prom_ant NUMBER;
  v_prom_nue NUMBER;
BEGIN
  SELECT AVG(sueldo_minimo)
  INTO v_prom_ant
  FROM cargo;
 
  UPDATE cargo
  SET sueldo_minimo = sueldo_minimo * 1.05;
 
  SELECT AVG(sueldo_minimo)
  INTO v_prom_nue
  FROM cargo;
 
  DBMS_OUTPUT.PUT_LINE('Promedio Salario Mínimo Antiguo: ' || ROUND(v_prom_ant));
  DBMS_OUTPUT.PUT_LINE('Promedio Salario Mínimo Nuevo: '    || ROUND(v_prom_nue));
 
  COMMIT;
END;
/

> Si no quieres dejar persistido el cambio, reemplaza `COMMIT;` por `ROLLBACK;`.

---

2.2 Procedimiento: “Empleados por departamento” con el formato pedido



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
SET SERVEROUTPUT ON;
 
CREATE OR REPLACE PROCEDURE empleados_por_departamento
AS
BEGIN
  DBMS_OUTPUT.PUT_LINE('EMPLEADOS POR DEPARTAMENTO');
  DBMS_OUTPUT.PUT_LINE('========================');
 
  FOR d IN (SELECT depto_id, nombre
            FROM departamento
            ORDER BY nombre)
  LOOP
    DBMS_OUTPUT.PUT_LINE(CHR(10) || 'Departamento: ' || d.nombre);
 
    FOR e IN (SELECT nombre
              FROM empleado
              WHERE depto_id = d.depto_id
              ORDER BY nombre)
    LOOP
      DBMS_OUTPUT.PUT_LINE('Empleado: ' || e.nombre);
    END LOOP;
 
    DBMS_OUTPUT.PUT_LINE('****************************');
  END LOOP;
END;
/

Ejecución:

1
2
3
4
BEGIN
  empleados_por_departamento;
END;
/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consultas SQL y PL/SQL (IT 2020)

Publicado por SenPro (2 intervenciones) el 06/05/2026 00:27:33
Vkn! Se agradece.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar