Diferència entre revisions de la pàgina «M2 - Bases de dades / Exercicis UF3: Llenguatges SQL / Solucions PL-SQL T7»
De wikiserver
(→T7- Tipus de dades compostes) |
(→T7- Tipus de dades compostes) |
||
Línia 1: | Línia 1: | ||
− | == | + | ==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). | ||
+ | <pre> | ||
+ | DECLARE | ||
+ | v_deptno NUMBER := 10; | ||
+ | </pre> | ||
+ | :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. | ||
<pre> | <pre> | ||
− | + | CURSOR c_emp_cursor IS | |
− | + | SELECT | |
− | + | last_name, salary,manager_id | |
+ | FROM employees | ||
+ | WHERE department_id = v_deptno; | ||
</pre> | </pre> | ||
− | + | :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”. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<pre> | <pre> | ||
− | + | 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; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | END; | ||
− | |||
</pre> | </pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Revisió del 16:56, 25 abr 2016
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;