0% encontró este documento útil (0 votos)
69 vistas5 páginas

Procedimientos SQL para Empleados

El documento describe una serie de ejercicios para desarrollar procedimientos PL/SQL que realizan consultas y modificaciones sobre bases de datos. Los ejercicios incluyen procedimientos para listar empleados ordenados por apellido, mostrar el número de empleados por departamento, aumentar el salario de empleados con sueldo menor al promedio y más.

Cargado por

bynicoxxxx
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
69 vistas5 páginas

Procedimientos SQL para Empleados

El documento describe una serie de ejercicios para desarrollar procedimientos PL/SQL que realizan consultas y modificaciones sobre bases de datos. Los ejercicios incluyen procedimientos para listar empleados ordenados por apellido, mostrar el número de empleados por departamento, aumentar el salario de empleados con sueldo menor al promedio y más.

Cargado por

bynicoxxxx
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Ejercicios

1. Desarrollar un procedimiento que visualice el apellido y la fecha de alta de todos los empleados ordenados
por apellido. Usar FOR, Y WHILE.

CREATE OR REPLACE PROCEDURE ver_emple


AS
CURSOR c_emple IS
SELECT APELLIDO, FECHA_ALT
FROM EMPLE
ORDER BY APELLIDO;
BEGIN
FOR i IN c_emple LOOP
DBMS_OUTPUT.PUT_LINE([Link] || ' ' || i.FECHA_ALT);
END LOOP;
END ver_emple;

2. Codificar un procedimiento que muestre el nombre de cada departamento y el número de empleados que
tiene. Usar FOR, Y WHILE.

CREATE OR REPLACE PROCEDURE ver_emple_depart


AS
CURSOR c_emple IS
SELECT [Link], COUNT(e.emp_no) contador
FROM emple e
JOIN depart d ON d.dept_no = e.dept_no
GROUP BY dnombre, e.dept_no;
BEGIN
FOR i IN c_emple LOOP
DBMS_OUTPUT.PUT_LINE([Link] || ' ' || [Link]);
END LOOP;
END ver_emple_depart;
3. Escribir un programa que visualice el apellido y el salario de los cinco empleados que tienen el salario más
alto.

CREATE OR REPLACE PROCEDURE ver_top5


AS
CURSOR c_top IS
SELECT apellido, salario from emple
ORDER BY salario desc;
cont number:=0;
BEGIN
for i in c_top loop
if cont<5 then
dbms_output.put_line('Apellido: ' || [Link] || ', Salario: ' || [Link]);
cont:=cont +1;
end if;
end loop;
END;
/

4. Codificar un procedimiento reciba como parámetros un numero de departamento, un importe y un


porcentaje; y suba el salario a todos los empleados del departamento indicado en la llamada. La subida será
el porcentaje o el importe indicado en la llamada (el que sea más beneficioso para el empleado en cada
caso empleado).

CREATE OR REPLACE PROCEDURE subida_sal(depart emple.dept_no%type, importe number, porcentaje number)

AS

CURSOR csubir IS
SELECT * FROM EMPLE WHERE dept_no = depart;
sal_importe number;
sal_porcentaje number;
begin
for i in csubir loop
sal_importe:=[Link] + importe;
sal_porcentaje:=[Link] + [Link] * (porcentaje/100);

if sal_importe > sal_porcentaje then


update emple set salario=sal_importe
where emp_no=i.emp_no;
else
update emple set salario=sal_porcentaje
where emp_no=i.emp_no;
end if;
end loop;
end subida_sal;
5. Realizar un procedimiento que va a aumentar el sueldo en 500 euros a aquellos empleados que tienen un
sueldo menor de la media. Utilizar cursores.

CREATE OR REPLACE PROCEDURE ej5


AS
CURSOR caum IS
SELECT * FROM EMPLE;
media number;
begin
SELECT AVG(salario) INTO media FROM EMPLE;
for i in caum loop
if [Link] < media then
Update emple set salario = salario + 500 where emp_no = i.emp_no;
end if;
end loop;
END;
/

6. Escribir un procedimiento que reciba una cadena y visualice el apellido y el número del empleado de todos
los empleados cuyo apellido contenga la cadena especificada. Al finalizar, visualizar el número de
empleados mostrados. Usar FOR

CREATE OR REPLACE PROCEDURE ej6(apellidos [Link]%type)


AS
CURSOR cemple IS
SELECT apellido, emp_no from emple where apellido like '%' || apellidos || '%';
v_apellido [Link]%TYPE;
v_emp_no EMPLE.emp_no%TYPE;
v_contador number := 0;
begin
for i IN cemple loop
v_apellido := [Link];
v_emp_no := i.emp_no;
DBMS_OUTPUT.PUT_LINE('Apellido: ' || v_apellido || ', Número de Empleado: ' || v_emp_no);
v_contador:= v_contador +1;
end loop;
DBMS_OUTPUT.PUT_LINE('Número total de empleados mostrados: ' || v_contador);
END;
/
7. Escribir un programa que muestre por:

a) Cada empleado, el apellido y salario.


b) Por cada departamento, número de empleados y suma de los salarios del departamento.
c) Al final del listado número total de empleados y suma de todos los salarios.

CREATE OR REPLACE PROCEDURE ej7()


AS
CURSOR cemple IS
SELECT apellido, salario from emple;
v_apellido [Link]%TYPE;
CURSOR cdepart IS
SELECT count(*) contar, sum(salario) from emple GROUP BY emple.dept_no;
IF c1%FOUND THEN
dep_ant := vr_emp.dept_no;
END IF;

FOR vr_emp IN c1 LOOP


IF dep_ant <> vr_emp.dept_no THEN
DBMS_OUTPUT.PUT_LINE('*** DEPTO: ' || dep_ant ||' NUM. EMPLEADOS: '||cont_emple ||' SUM.
SALARIOS: '||sum_sal);

dep_ant := vr_emp.dept_no;
tot_emple := tot_emple + cont_emple;
tot_sal := tot_sal + sum_sal;
cont_emple := 0;
sum_sal := 0;
END IF;
END LOOP;
END;

8. Realiza un procedimiento que visualice el apellido y el salario total (salario + comisión) de los tres
empleados que tienen el salario total más bajo. Usar WHILE

CREATE OR REPLACE PROCEDURE ej8


AS
CURSOR cemple IS
SELECT apellido, salario FROM emple
ORDER BY salario ASC;
vr_emp c_emp%ROWTYPE;
i NUMBER;
BEGIN
i:=1;
OPEN cemple;
FETCH cemple INTO vr_emp;
WHILE cemple%FOUND AND i<=5 LOOP
DBMS_OUTPUT.PUT_LINE(vr_emp.apellido ' * ' vr_emp.salario);
FETCH cemple INTO vr_emp;
i:=I+1;
END LOOP;
CLOSE cemple;
END;
/
9. Realiza un procedimiento que visualice los 2 empleados que ganan menos dinero de cada departamento.
CREATE OR REPLACE PROCEDURE ej9
AS
CURSOR cemple IS
SELECT apellido, oficio, salario FROM emple
ORDER BY oficio, salario;
vr_emp cemple%ROWTYPE;
oficio_ant [Link]%TYPE;
i NUMBER;
BEGIN
oficio_ant := '';
i := 1;
FOR vr_emp IN cemple LOOP
IF oficio_ant <> vr_emp.oficio THEN
oficio_ant := vr_emp.oficio;
i := 1;
END IF;
IF i <= 2 THEN
DBMS_OUTPUT.PUT_LINE(vr_emp.oficio || ' ' vr_emp.apellido ' * ' || vr_emp.salario);
END IF;
i := i + 1;
END LOOP;
END

10. Realizar una función que introduciendo el nombre de una asignatura, me devuelva su código.

Realizar un procedimiento que me visualice todos los alumnos de la asignatura devuelta por la función y
que tenga una nota mayor que 5.

CREATE OR REPLACE FUNCTION obtener_codigo_asignatura(nombre_asignatura VARCHAR2) RETURN


NUMBER IS
v_codigo NUMBER;
BEGIN
-- Utiliza la tabla de asignaturas y ajusta la consulta según la estructura de tu base de datos
SELECT codigo INTO v_codigo FROM asignaturas WHERE nombre = nombre_asignatura;

RETURN v_codigo;
END obtener_codigo_asignatura;
/

CREATE OR REPLACE PROCEDURE visualizar_alumnos_con_nota_superior5(nombre_asignatura VARCHAR2)


AS
v_codigo_asignatura NUMBER;
BEGIN
-- Llamamos a la función para obtener el código de la asignatura
v_codigo_asignatura := obtener_codigo_asignatura(nombre_asignatura);

-- Mostramos todos los alumnos de la asignatura con nota mayor que 5


FOR alumno IN (SELECT nombre_alumno, nota FROM calificaciones WHERE codigo_asignatura =
v_codigo_asignatura AND nota > 5) LOOP
DBMS_OUTPUT.PUT_LINE('Alumno: ' || alumno.nombre_alumno || ', Nota: ' || [Link]);
END LOOP;
END visualizar_alumnos_con_nota_superior5;
/

También podría gustarte