Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Soluciones Ejercicios PL/SQL
Soluciones Ejercicios PL/SQL
Prcticas
Prctica 2 Soluciones
Evale las siguientes declaraciones. Determine cules de ellos no son legales, y explique por qu.
Ilegal, porque slo se permite un identificador por declaracin.
C. DECLARE
v_birthdate DATE NOT NULL;
Ilegal, porque una variable NOT NULL ha de ncializarse.
Ilegal, porque 1 no es una expresin booleana.
Desarrcllo de Aplicaciones con PL/SQL Apndice E-2
Prctica 3 Soluciones
PLISQL Block
Desarrollo de Aplcacinnes con PLISQL Apndice
Prctica 4 Soluciones
l. Cree un bloque PL/SQL que seleccione el departamento con el nmero ms alto de la tabla DEPT y lo almacene en una
variable SQL*Plus. Imprima los resultados en la pantalla. Guarde su bloque PL/SQL en un archivo llamado p4q1.sql..
VARIABLE gmax*deptno NUMBER
2. Cree un bloque PUSQL que inserte un nuevo departamento en la tabla DEPT. Guarde su bloque PL/SQL en un archivo
llamado p4q2.sql.
a. Utilice el nmero del departamento recuperado del ejercicio 1 y aada 10 al nmero como nmero de departamento de entrada
para el nuevo depimamemto4
b. Cree un parmetro para el nombre del departamento.
c. Por el momento deje la ubicacin como nula.
d. Ejecute el bloque PL/SQL
Desarrollo de Aplicaciones con PLISQL Apndice E~11
Prctica 5 Soluciones
1.
Ejecute el script messages.sql para crear la tabla MESSAGES. Escriba un bloque PL/SQL para
insertar nmeros en la tabla MESSAGES`
CREATE TABLE messages (results VARCHAR2 (60))
/
a. Inserte los nmeros 1 a 10 excepto 6 y 8.
b. Haga commit antes del fnal del bloque.
BEGI N
FOR i IN 1..10 LOOP
IF i 6 or i = 8 THEN
null:
ELSE
INSERT INTO messages (results) VALUES (5.);
END IF;
COMMIT 7
END LOOP
ENDI
c. Haga una seleccin en la tabla MESSAGES para vecar que funcion su bloque PL/SQL.
SQL> SELECT *
2 FROM messages:
Cree un bloque PL/'SQL que ei importe de comisin de un empleado, basndose en
sueldo del empleado.
a. Acepte el nmero de empleado como entrada de usuau con un parmetro de sustitucin SQL*Plus.
b. Si el sueldo del empleado es inferior a 100053, establezca el impone de comisin del empleado en un 10% del sueldo.
c. S el sueldo del empleado est entre 1000$ y 15()0$, establezca el importe de comisin del empleado en un 15% del sueldo.
d Si el sueldo del empleado pasa de 150055, establezca el importe de comisin del empleado en el 20% del sueldoA
e. Si el sueldo del empleado es NULL, establezca el importe de comisin del empleado en 0.
f . Haga commit.
Desarrollo de Aplicaciones con PUSQL Apndice E-15
Prctica 6 Soluciones
L Crear una nueva tabla en la que almacenar empleados y sus sueldos.
SQL> CREATE TABLE topdogs
2 (name VARCHAR2 (25) , 3 salary NUMBER(11,2));
2. Escriba un bloque PL/SQL para recuperar el nombre y el sueldo de un empleado concreto de la tabla EMP basndose en el
nmero del empleado. Utilice tablas PL/SQL.
a. Declare dos tablas PL/SQL, ENAME_TABLE y SAL_TABLE para almacenar temporalmente los nombres y los sueldos.
b. Puesto que todos los nombres y sueldos son recuperados dentro del loop, almacnelos en tablas PL/SQL.
c. Fuera del loop, transfiera los nombres y sueldos de las tablas PL/SQL a la tabla TOP__DOGS.
do Vace la tabla TOPODOGS y ejecute el ejercicio.
Desarrollo de Apiicaciones con PLISQL Apndice
Prctica 7 Soluciones
1. Preprcse para este ejercicio vaciando la tabla TOILDOGS.
2. Cree un blnque PL/SQL que determine los empleados con sueldos ms altos.
a. Acepte un nmero n como entrada de usuario con un parmetro de sustitucin SQL*Plus.
b. En un bucle, obtenga los apellidos y sueldos de los n empleados con sueldos ms altos de la tabla EMP.
c. Almacena los nombres y suddcs en la tabla TOP,DOGS.
d. Suponga que no hay dos empleados con el mismo sueldo.
e, Compruebe varios casos, como un n , 0 donde n es mayor que el nmero de empleados de la tabla EMP.
ACCEPT pmnum PROMPT Please enter the number of top money makers:
fA Vaca la tabla TOP_DOGS despus de cada prueba.
Desarrollo de Aplicaciones con PLISGL Apndice
Prctica 8 Soluciones
1. Ejecute una consulta para recuperar todos los departamemos y empleados de cada departamento.
Inserte los resultados en la tabla MESSAGES, Utilice un cursor para recuperar el nmero de dpanamemo y transralo a un
cursor para recuperar los empleados de ese departamento.
Desarrollo de Aplicaciones con PL/SQL Apndice E-22
Prctica 9 Soluciones
l. Escriba un PL/SQL para seleccionar el nombre del empleado con un valor concreto de sueldo. Le preguntaremos el sueldo al
usuario a travs de un parametro SQL*Plus.
a. Si el sueldo introducido devuelve ms de una gestione la excepcin con un manejador
de excepciones apropiado e inserte en la tabla MESSAGES Ms de un empleado con un sueldo de <.sueldo>.
b. Si el sueldo introducido no devuelve ninguna fila, gestione la excepcin con un manejador
de excepciones apropiado e inserte en la tabla MESSAGES Ningn empleado con un sueldo de <sueld0>.
C, Si el sueldo introducido solo devuelve una fila, insene en la tabla MESSAGES el nombre
del empelado y el importe del sueldo.
d. Gestione cualquier otra excepcin con un manejador de excepciones apropiado e inserte en
la tabla MESSAGES Se produjo algn otro error`
e. Pruebe el bloque con varios casos
SET VERIFY OFF ACCEPT p_sa1 PROMPT 'Please enter the salary value: '
WHEN nodatafound THEN
INSERT INTO messages (results)
VALUES ('No employee with a salary of H TOCHAR(v_sal)); WHEN too__many,_rows THEN
INSERT INTO messages (results) VALUES ('More than one employee with a salary of ' H
TO_CHAR(v__sa1) ) ;
WHEN others THEN
INSERT INTO messages (results) VALUES ('Some other error occurred. ');
END:
/
SET VERIFY ON SQL> START p9ql.Bq1
Desarrollo de Aplicaciones con PUSQL Apndice E-24
ERROR at line 1:
ORA20200: Not a valid hiredate
ORA-06512: at "SCOTT CHKMPACK" , line 9
ORA~065l2: at line 1
e. Pruebe el procedimiento CHKJIIREDATE mediante el comando siguiente:
SQL> execute chkpack.chkhiredate('01-JAN-98')
PL/SQL procedure successfully completed.
Desarrollo de Aplicaciones con PLISQL Apndice