Diferència entre revisions de la pàgina «P7-Uso de cursores explícitos»
De wikiserver
(Hi ha 3 revisions intermèdies del mateix usuari que no es mostren) | |||
Línia 11: | Línia 11: | ||
for a raise”. De lo contrario, aparece el mensaje “<<last_name>> Not Due for a raise”. | for a raise”. De lo contrario, aparece el mensaje “<<last_name>> Not Due for a raise”. | ||
d) Pruebe el bloque PL/SQL para los siguientes casos: | d) Pruebe el bloque PL/SQL para los siguientes casos: | ||
− | [[Fitxer:7_1.png| | + | [[Fitxer:7_1.png|500px|casos]] |
'''2) A continuación, escriba un bloque PL/SQL que declare y utilice dos cursores: uno sin parámetro y otro con parámetro. | '''2) A continuación, escriba un bloque PL/SQL que declare y utilice dos cursores: uno sin parámetro y otro con parámetro. | ||
Línia 20: | Línia 20: | ||
'''El segundo cursor recibe el número de departamento como parámetro y recupera los detalles de los empleados que trabajan en ese departamento y cuyo employee_id sea menor que 120.''' | '''El segundo cursor recibe el número de departamento como parámetro y recupera los detalles de los empleados que trabajan en ese departamento y cuyo employee_id sea menor que 120.''' | ||
− | a) Declare un cursor c_dept_cursor para recuperar department_id y | + | a) Declare un cursor c_dept_cursor para recuperar department_id y department_name para los |
− | + | departamentos con department_id menor que 100. Ordene por department_id. | |
− | + | b) Declare otro cursor c_emp_cursor que tome el número de departamento como parámetro y | |
− | b) Declare otro cursor c_emp_cursor que tome el número de departamento como | + | recupere los siguientes datos de la tabla employees: last_name,job_id, hire_date y salary |
− | + | de los empleados que trabajan en ese departamento, con employee_id menor que 120. | |
− | |||
− | |||
c) Declare las variables que contienen los valores recuperados de cada cursor. | c) Declare las variables que contienen los valores recuperados de cada cursor. | ||
Utilice el atributo %TYPE mientras declara las variables. | Utilice el atributo %TYPE mientras declara las variables. | ||
− | d) Abra c_dept_cursor, utilice un bucle simple y recupere los valores en las | + | d) Abra c_dept_cursor, utilice un bucle simple y recupere los valores en las variables |
− | + | declaradas. Muestre el número y el nombre de departamento. Utilice el atributo de cursor | |
− | + | adecuado para salir del bucle. | |
− | e) Abra c_emp_cursor transfiriendo el número de departamento actual como | + | e) Abra c_emp_cursor transfiriendo el número de departamento actual como parámetro. |
− | + | Inicie otro bucle y recupere los valores de emp_cursor en las variables e imprima todos | |
− | + | los detalles recuperados de la tabla employees. | |
Nota | Nota | ||
• Compruebe si c_emp_cursor ya está abierto antes de abrirlo. | • Compruebe si c_emp_cursor ya está abierto antes de abrirlo. | ||
Línia 40: | Línia 38: | ||
• Cuando termine el bucle, imprima una línea después de haber mostrado los | • Cuando termine el bucle, imprima una línea después de haber mostrado los | ||
detalles de cada departamento y cierre c_emp_cursor. | detalles de cada departamento y cierre c_emp_cursor. | ||
− | f) Termine el primer bucle y cierre c_dept_cursor. A continuación, termine la | + | f) Termine el primer bucle y cierre c_dept_cursor. A continuación, termine la sección ejecutable. |
− | |||
g) Ejecute el script. La salida de ejemplo es la siguiente: | g) Ejecute el script. La salida de ejemplo es la siguiente: | ||
+ | [[Fitxer:7_2.png|500px|casos]] |
Revisió de 18:14, 24 nov 2014
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). 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. 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”. d) Pruebe el bloque PL/SQL para los siguientes casos:
2) A continuación, escriba un bloque PL/SQL que declare y utilice dos cursores: uno sin parámetro y otro con parámetro.
El primer cursor recupera el número de departamento y el nombre del departamento de la tabla departments para todos los departamentos cuyos números de identificador sean menores que 100.
El segundo cursor recibe el número de departamento como parámetro y recupera los detalles de los empleados que trabajan en ese departamento y cuyo employee_id sea menor que 120.
a) Declare un cursor c_dept_cursor para recuperar department_id y department_name para los departamentos con department_id menor que 100. Ordene por department_id. b) Declare otro cursor c_emp_cursor que tome el número de departamento como parámetro y recupere los siguientes datos de la tabla employees: last_name,job_id, hire_date y salary de los empleados que trabajan en ese departamento, con employee_id menor que 120. c) Declare las variables que contienen los valores recuperados de cada cursor. Utilice el atributo %TYPE mientras declara las variables. d) Abra c_dept_cursor, utilice un bucle simple y recupere los valores en las variables declaradas. Muestre el número y el nombre de departamento. Utilice el atributo de cursor adecuado para salir del bucle. e) Abra c_emp_cursor transfiriendo el número de departamento actual como parámetro. Inicie otro bucle y recupere los valores de emp_cursor en las variables e imprima todos los detalles recuperados de la tabla employees. Nota • Compruebe si c_emp_cursor ya está abierto antes de abrirlo. • Utilice el atributo de cursor adecuado para la condición de salida. • Cuando termine el bucle, imprima una línea después de haber mostrado los detalles de cada departamento y cierre c_emp_cursor. f) Termine el primer bucle y cierre c_dept_cursor. A continuación, termine la sección ejecutable. g) Ejecute el script. La salida de ejemplo es la siguiente: