PL/SQL Laboratorio 2: CURSORES y EXCEPCIONES
Enviado por Lord Valdomero • 30 de Noviembre de 2020 • Apuntes • 810 Palabras (4 Páginas) • 459 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’);
...