Está en la página 1de 4

Oracle Database 10g: Program with PL/SQL 2008

Práctica 7. 
Los ejercicios deben realizarse con el mismo usuario con los que se han realizado las
prácticas anteriores.

1. Crea un bloque PL/SQL que determine el top-n con el salario de los empleados

a. Ejecute el script lab_07_01.sql para crear la tabla top_salaries, donde se


almacenen los salarios de los empleados.
b. Ingrese un número n de empleados donde n representa el número de los n salarios
más altos de la tabla EMPLOYEES. Por ejemplo, para ver los cinco salarios más altos,
introduzca el número 5.
Nota: Utilice el comando DEFINE para definir una variable p_num y capturar el
valor de n. Pase el valor al bloque PL/SQL a través de una variable de substitución.
c. En la sección declarativa, declara dos variables: num de tipo NUMBER para recibir
la variable de sustitución p_num, sal de tipo employees.salary. Declare el cursor,
emp_cursor, que recupere los salarios de los empleados en orden descendente
Recuerde que los salarios no deben estar duplicados.
d. En la sección de ejecución, abra un bucle y recupere los n salarios más altos e
insértelos en la tabla top_salaries. Puede usar un bucle simple para operar los
datos. Intente usar los atributos %ROWCOUNT y %FOUND para la condición de
salida.
e. Después de insertar los registros, despliéguelos con una sentencia SELECT. La salida
que se muestra los cinco salarios más altos en la tabla employees.

f. Pruebe una variedad de casos especiales, como n = 0 o cuando n es más grande


que el número de empleados en la tabla EMPLOYEES. Vacíe la tabla
TOP_SALARIES después de cada prueba.

2. Crear un bloque PL/SQL que haga lo siguiente:

a. Utilice el comando DEFINE para definir la variable p_deptno para captura el


department ID.
b. En la sección de declaración, declare una variable deptno de tipo NUMBER y
asígnele el valor de p_deptno.

Práctica 7
1
Oracle Database 10g: Program with PL/SQL 2008

c. Declare un cursor, emp_cursor, para recuperar apellido, salario, y manager id de


los empleados que trabajan en el departamento especificado en deptno.
En la sección de ejecución, use el bucle FOR de cursor para procesar los datos que
se recuperan. Si el salario del empleado es menor que 5000 y si la clave del jefe es
101 ó 124, despliegue el mensaje ‘<<last_name>> Due for a raise’. De otro modo,
despliegue el mensaje ‘<<last_name>> Not due for a raise’.
d. Pruebe el bloque PL/SQL para los siguientes casos:

3. Escriba un bloque PL/SQL que declare y use cursores con parámetros.


En un bucle, utilice un cursor para recuperar el número y nombre de departamento de
la tabla DEPARTMENTS para los departamentos que tengan DEPARTMENT_ID menor a
100. Pase el número de departamento a otro cursor, como parámetro, que recupere
de la tabla EMPLOYEES los detalles de apellido, puesto, fecha de contratación, y
salario de cada empleado que tenga su EMPLOYEE_ID menor que 120 y que trabaje
en ese departamento.

a. Declare un cursor dept_cursor que reciba la clave y nombre de aquellos


departamentos con ID menor a 100. Ordene por clave de departamento.
b. Declare otro cursor emp_cursor que reciba el número de departamento como
parámetro y recupere el apellido, puesto, fecha de contratación y salario de
aquellos empleados con ID menor a 120 y que trabajen en ese departamento.
c. Declare variables para recibir los valores recuperados en cada cursor. Use el
atributo %TYPE para declarar variables.
d. Abra el cursor dept_cursor, use un bucle simple y recupere valores asignándolos a
las variables declaradas. Despliegue el número y nombre de departamento.
e. Para cada departamento, abra el cursor emp_cursor pasándole el número de
departamento como parámetro. Inicie otro bucle que recupere los valores del
cursor emp_cursor a las variables y despliegue todos los detalles recuperados de la
tabla de empleados.
Note: Quizá quieras imprimir una línea antes de los detalle de cada departamento.

Práctica 7
2
Oracle Database 10g: Program with PL/SQL 2008

Use atributos apropiados para condicionar la salida. También determine si un


cursor está abierto antes de abrirlo de nuevo.
f. Cierre todos los bucles y cursores y finalice la sección ejecutable. Ejecute el script y
sálvelo con el nombre lab_07_03_soln.sql

4. Cargue el script lab_06_04_soln.sql.

Práctica 7
3
Oracle Database 10g: Program with PL/SQL 2008

a. Busque el comentario “DECLARE A CURSOR CALLED emp_records TO HOLD


salary, first_name, and last_name of employees” - (Declare un cursor llamado
emp_records para recibir el salario, nombre y apellido de los empleados) - e
incluya la declaración. Cree el cursor de tal modo que reciba el salario,
nombre y apellido de empleados en el departamento especificado por el
usuario (variable de sustitución emp_deptid). Use la cláusula FOR UPDATE.
b. Busque el comentario “INCLUDE EXECUTABLE SECTION OF INNER BLOCK HERE” -
(Incluya aquí la sección ejecutable del boque interno) - y comience el bloque
ejecutable.
c. Sólo los empleados que trabajan en los departamentos 20, 60, 80,100, and 110
son elegibles para aumento este trimestre. Verifique si el usuario ha capturado
algunos de esos departamentos (IDs). Si el valor no coincide despliegue el
mensaje “SORRY, NO SALARY REVISIONS FOR EMPLOYEES IN THIS DEPARTMENT.”
– (Lo sentimos, no hay revisiones de salario para empleados en ese
departamento) - Si el valor coincide, entonces abra el cursor emp_records.
d. Inicie un bucle simple y recupere los valores en las variables emp_sal,
emp_fname, and emp_lname. Use %NOTFOUND para la condición de salida.
e. Incluya una expresión CASE. Utilice la siguiente tabla como referencia para las
condiciones en la cláusula WHEN de la expresión CASE.
Nota: En el CASE use las constantes c_range1, c_hike1 que se encuentran
declaradas.

Por ejemplo, si el salario del empleado es menor a 6500, entonces incremente


al salario en un 20%. En cada cláusula WHEN, concatene el nombre y apellido
del empleado y almacénelo en la tabla INDEX BY. Incremente el valor de la
variable I de tal modo que se pueda almacenar la cadena en la siguiente
ubicación. Incluya una sentencia UPDATE con la cláusula WHERE CURRENT OF.
f. Cierre el bucle. Use el atributo %ROWCOUNT y despliegue el número de
registros que fueron modificados. Cierre el cursor.
g. Incluya un bucle simple para desplegar los nombres de todos los empleados
cuyo salario fue incrementado.
Note: Los nombres de esos empleados se encuentran en la tabla INDEX BY.
Busque el comentario “CLOSE THE INNER BLOCK” – (Cierre el bloque interno) – e
incluya la sentencia END IF y la sentencia END.
h. Guarde el script con el nombre lab_07_04_soln.sql.

Práctica 7
4

También podría gustarte