Documente Academic
Documente Profesional
Documente Cultură
Pre-Taller IV
Pre-Taller IV
PL/SQL: Stored Procedures y Triggers
Para poder realizar los ejercicios de este pretaller debe eliminar sus tablas y ejecutar los
nuevos archivos de comandos "hoturca_schema2.sql" y "hoturca_load2.sql".
Se ha agregado una nueva tabla a la base de datos llamada HABITA_CIERRE. Esta tabla es
actualizada con los montos de los consumos totales realizados por una habitación en un día
dado.
2.IV-1
CI-3315: Sistemas de Bases de Datos I Enero-Abril 2003
Pre-Taller IV
Para la aplicación 1.1 deberá elaborar un script "proc1.sql" para crear un procedimiento
realiza_cierre el cual recibe como parámetro fechaCierre, donde fechaCierre es el día
para el cual se calcula el cierre. El procedimiento realiza_cierre debe almacenar las
respectivas tuplas en la tabla HABITA_CIERRE. En caso que una habitación no tenga
consumo en ese día, el monto consumido debe ser 0.
Para la aplicación 1.2 deberá elaborar un script "func1.sql" para crear una función fclas_hab
que reciba como parámetro de entrada el identificador de la habitación, y retorne un string
con alguno de los valores: " habitación altamente asignada ", "habitación muy asignada",
"habitación medianamente asignada", "habitación poco asignada" o "habitación pobremente
asignada". El valor retornado corresponde a la clasificación de la habitación. Elabore
además un script "prueba-func1" para crear un procedimiento de prueba pclas_hab, con
parámetro NumHabitacion que invoque a la función fclas_hab y muestre en pantalla el string
retornado por la llamada a la función.
2.IV-2
CI-3315: Sistemas de Bases de Datos I Enero-Abril 2003
Pre-Taller IV
k) ¿Se podría implementar el requerimiento 1.1 o el 1.2 con algunos de los comandos de
SQL que ha estudiado en clase? Justifique su respuesta. En caso afirmativo, dé su
implementación en SQL. Puede hacer uso de vistas.
Antes de usar los "triggers", se requiere que usted entienda los siguientes puntos:
a) ¿Cuáles son los tipos de eventos en los que puede activarse un "trigger"?
2.IV-3
CI-3315: Sistemas de Bases de Datos I Enero-Abril 2003
Pre-Taller IV
b) Los "trigger" permiten indicar el orden de ejecución del código asociado a un "trigger"
con respecto a la operación que dio pié al evento que lo disparó. ¿Cuáles son los tres
posibles órdenes que pueden establecerse?
c) En un "trigger", ¿ Para qué sirven las "variables mágicas" old y new ?. ¿ Para cuáles
operaciones tiene sentido la variable old y para cuáles la variable new?. ¿A través de qué
cláusula puede cambiarse el nombre de las variables mágicas new y old?
d) ¿Qué diferencia existe entre un "trigger" a nivel de filas (definidos utilizando la cláusula
FOR EACH ROW) y un "trigger" a nivel de tabla (aquel definido sin utilizar la cláusula
FOR EACH ROW)?
e) ¿Para que sirve la cláusula WHEN? Es aplicable para "triggers" a nivel de filas? Es
aplicable para "triggers" a nivel de tablas?
f) ¿Qué utilidad le encuentra a los predicados INSERTING, DELETING y UPDATING?
¿Qué relación existe entre estos predicados y los posibles eventos que pueden disparar
la ejecución de un "trigger"?
g) ¿Cómo se pueden habilitar y deshabilitar los "triggers"?
h) ¿Qué es una tabla mutante?
2.IV-4
CI-3315: Sistemas de Bases de Datos I Enero-Abril 2003
Pre-Taller IV
• Para las restricciones de integridad (2.1 y 2.2), cree un archivo “trig1.sql” con la
especificación de los triggers requeridos para implementarlas. Para verificar su
funcionamiento utilice el comando "SPOOL trig1.txt" y realice las siguientes inserciones
en la base de datos:
§ INSERT INTO ASIGNA VALUES('D006','R027',1,1);
§ ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YY
HH:MIAM';
§ INSERT INTO CONSUMO VALUES('D006', 'R027', 'S005', 'C',
200000.00, '14-JUN-03 9:00am','G001');
• Para la propiedad dinámica (2.3), cree un archivo "trig2.sql" con la creación de los
triggers. Para verificar el funcionamiento de los triggers utilice el comando "SPOOL
trig2.txt". Siga los siguientes pasos:
• Realice la siguiente inserción en la base de datos:
§ INSERT INTO RESERVA VALUES ( 'R040', '27-JUN-03', '30-JUN
03','V999999','JOSE PEREZ', 2);
Explique qué ocurre.
• Deshabilite los triggers implementados para la restricción de integridad 2.2, e
inserte la tupla:
§ INSERT INTO RESERVA VALUES ( 'R041', '25-JUN-03', '30-JUN-
03','V333333','JOSE PEREZ', 2);
Consulte las modificaciones en la tabla ASIGNA para las reservaciones
R040 y R041. Explique qué ocurre.
2.IV-5