PL/SQL Laboratorio 2: CURSORES y EXCEPCIONES
Lord ValdomeroApuntes30 de Noviembre de 2020
810 Palabras (4 Páginas)489 Visitas
UTFSM – Sede Viña del Mar
PL/SQL
Laboratorio 2: CURSORES y EXCEPCIONES
OBJETIVOS:
Acercar al alumno a la práctica del manejo de cursores y algunas excepciones.
EJERCICIOS
Utilizando SqlDeveloper:
- Escriba el siguiente código para PL/SQL y comente que hace. Explique por que está generando una excepción.
DECLARE
v_nomemp VARCHAR2(50);
BEGIN
SELECT nom_emp
INTO v_nomemp
FROM empleado
WHERE cod_supervisor = 7839;
dbms_output.put_line('La lectura del cursor es: ' || v_nomemp);
EXCEPTION
WHEN TOO_MANY_ROWS THEN
dbms_output.put_line ( ‘MUCHAS FILAS’);
end;
- Reescriba el código de forma que muestre lo que se solicita.
- Escriba un bloque anónimo para seleccionar el nombre de los empleados cuyo supervisor tiene cod_supervisor igual a 7368. Si revisa la tabla empleado, no existe ningún empleado, por lo tanto utilice NO_DATA_FOUND para enviar un mensaje.
- Muestre los nombres de los departamentos con código de departamento distinto a 10 implementando un cursor. Declare una variable que utilice %ROWTYPE para definir su tipo. Utilíce el atributo %FOUND del cursor para condicionar mostrar el nombre del departamento sino que salga del bloque.
- Muestre el código del empleado, nombre del empleado y departamento al cual pertenece implementando un cursor. Defina las variables utilizando %TYPE. Para la iteración ocupe LOOP, EXIT WHEN con %NOTFOUND y END LOOP. Además debe indicar el total de registros afectados (%ROWCOUNT)
Resultado esperado:
CODIGO NOMBRE DEPTO
7839 Karla Finanzas
7566 Juan P. Desarrollo
7902 Fabián Desarrollo
7369 Juan Desarrollo
7698 Blanca Ventas
7499 Allen Ventas
….
Total de registros: XX
- Haga el ejercicio anterior con WHILE – LOOP
- Haga el ejercicio anterior con FOR – LOOP. Ver el uso de %ROWCOUNT.
- El siguiente código debe ser depurado. Depúrelo e indique porque aparece la excepción de cursor inválido.
SET SERVEROUTPUT ON;
DECLARE
CURSOR c_sueldo
IS
SELECT *
FROM sueldo;
Reg_sueldo sueldo%TYPE;
BEGIN
FETCH c_sueldo INTO reg_sueldo;
DBMS_OUTPUT.PUT_LINE( ‘CODIGO’ || ‘ ‘ || ‘MINIMO’ || ‘ ‘ || ‘MAXIMO’);
LOOP
FETCH c_sueldo INTO reg_sueldo;
DBMS_OUTPUT.PUT_LINE( c_sueldo.grado || ‘ ‘ || c_sueldo.sueldo_minimo || ‘ ‘ || c_sueldo.sueldo_maximo);
END LOOP;
CLOSE c_sueldo;
FETCH c_sueldo INTO reg_sueldo;
EXCEPTION
WHEN invalid_cursor THEN
DBMS_OUTPUT.PUT_LINE( ‘CURSOR INVÁLIDO’);
END;
- Cursor de actualización: Actualice el código de supervisor a 7697 a los empleados cuyo supervisor es el 7566. Verifique con un select antes de programar el bloque pl/sql a cuales empleados debiera modificar.
- Cursor con parámetros: Implemente un cursor con el parámetro p_ubica de tipo CHAR seleccionando todos los datos de la tabla depto donde la ubicación sea igual al parámetro p_ubica. Al abrir el cursor coloque como parámetro ‘Valpo’, recorra el cursor y muestre el código del depto, el nombre del depto y la ubicación que debería ser ‘Valpo’.
- Ejercicios tipo Certamen:
- Permita que el usuario ingrese un código de supervisor y que el bloque anónimo, según el departamento al que pertenece ese supervisor: A) muestre la cantidad de supervisores, si el supervisor pertenece al departamento 10 o 20, B) Muestre la cantidad de supervisores distintos, si el supervisor pertenece al departamento 30 o 40 y C) Que muestre el mensaje correspondiente si el código de supervisor no existe. (20 puntos)
- Escriba un bloque anónimo que reciba el código del empleado a eliminar. Cuando se borra un empleado todos los empleados que dependían de él pasarán a depender del supervisor del empleado borrado. Validar si el código no existe. (20 puntos)
- Se solicita insertar un nuevo departamento, recibe todos los datos del departamento. Debe validar que no se ingrese un código de departamento duplicado y/o nombre de departamento duplicado. Debe enviar un mensaje indicando que se realizó la inserción. (30 puntos)
- Implemente un cursor que muestre el nombre del empleado y el nombre del departamento al cual pertenece, de los empleados que tienen el sueldo más alto. (30 puntos)
Observación:
Al finalizar envie el archivo a catherine.gomez@usm.cl con el título PL_LAB_2 y en el email el nombre del alumno.
CGB
...