M2 - Bases de dades / Exercicis UF3: Llenguatges SQL / Solucions PL-SQL T7

De wikiserver
La revisió el 16:56, 25 abr 2016 per Rsort (Discussió | contribucions) (T7- Tipus de dades compostes)
Dreceres ràpides: navegació, cerca

Solución 7-1: Uso de Cursores Explícitos

En esta lección, realizará dos ejercicios:

  • Primero, utilizará un cursor explícito para procesar un número de filas de una tabla y rellenar otra tabla con los resultados mediante un bucle FOR de cursor.
  • Después, escribirá un bloque PL/SQL que procese la información con dos cursores, incluido uno que utilice un parámetro.

1) Cree un bloque PL/SQL que realice las siguientes acciones:

a) En la sección de declaraciones, declare e inicialice una variable llamada v_deptno de tipo NUMBER. Asigne un valor de identificador de departamento válido (consulte los valores en la tabla del paso d).
    DECLARE
    v_deptno NUMBER := 10;
b) Declare un cursor llamado c_emp_cursor, que recupere last_name, salary y manager_id de los empleados que trabajan en el departamento especificado en v_deptno.
    CURSOR c_emp_cursor IS
      SELECT
      last_name, salary,manager_id
      FROM employees
      WHERE department_id = v_deptno;
c) En la sección ejecutable, utilice el bucle FOR de cursor para realizar operaciones en los datos recuperados. Si el salario del empleado es menor que 5.000 y si el identificador de superior es 101 o 124, aparece el mensaje “<<last_name>> Due for a raise”. De lo contrario, aparece el mensaje “<<last_name>> Not Due for a raise”.
    BEGIN
      FOR emp_record IN c_emp_cursor
      LOOP
        IF emp_record.salary < 5000 AND (emp_record.manager_id=101OR emp_record.manager_id=124) THEN
          DBMS_OUTPUT.PUT_LINE (emp_record.last_name || ' Due for a raise');
        ELSE
           DBMS_OUTPUT.PUT_LINE (emp_record.last_name || ' Not Due for a raise');
        END IF;
      END LOOP;
    END;