111 - Disparador de múltiples eventos |
Una librería almacena los datos de sus libros en una tabla denominada "libros" y controla las acciones que los empleados realizan sobre dicha tabla almacenando en la tabla "control" el nombre del usuario y la fecha, cada vez que se modifica el precio o la editorial de un libro.
1- Elimine las tablas:
drop table control; drop table libros;
2- Cree las tablas con las siguientes estructuras:
create table libros( codigo number(6), titulo varchar2(40), autor varchar2(30), editorial varchar2(20), precio number(6,2) ); create table control( usuario varchar2(30), fecha date, operacion varchar2(20) );
3- Ingrese algunos registros en "libros":
insert into libros values(100,'Uno','Richard Bach','Planeta',25); insert into libros values(103,'El aleph','Borges','Emece',28); insert into libros values(105,'Matematica estas ahi','Paenza','Nuevo siglo',12); insert into libros values(120,'Aprenda PHP','Molina Mario','Nuevo siglo',55); insert into libros values(145,'Alicia en el pais de las maravillas','Carroll','Planeta',35);
4- El gerente permite:
- ingresar o borrar libros de la tabla "libros" unicamente los sábados de 8 a 12 hs.
- actualizar los precios de los libros de lunes a viernes de 8 a 18 hs. y sábados entre la 8 y 12 hs.
Cree un disparador para los tres eventos que controle la hora en que se realizan las operaciones sobre "libros". Si se intenta eliminar, ingresar o actualizar registros de "libros" fuera de los días y horarios permitidos, debe aparecer un mensaje de error. Si la operación de ingreso, borrado o actualización de registros se realiza, se debe almacenar en "control", el nombre del usuario, la fecha y el tipo de operación ejecutada
5- Cambie la fecha y hora del sistema a "domingo 19 hs.". Intente ingresar un libro
Mensaje de error.
6- Cambie la fecha y hora del sistema a "lunes 10 hs.". Intente ingresar un libro.
Mensaje de error.
7- Cambie la fecha y hora del sistema a "sabado 8 hs.". Ingrese un libro
8- Realice un "select" sobre "libros" y sobre "control" para verificar que se han cargado los datos correspondientes/
Aparece el nuevo libro en "libros" y una fila de "ingreso" en "control".
9- Cambie la fecha y hora del sistema a "domingo 18 hs.". Intente modificar el precio de un libro.
Mensaje de error.
10- Cambie la fecha y hora del sistema a "sabado 15 hs.". Intente modificar el precio de un libro.
Mensaje de error.
11- Cambie la fecha y hora del sistema a "sabado 9 hs.". Actualice el precio de un libro
12- Realice un "select" sobre "libros" y sobre "control" para verificar que se han cargado los datos correspondientes.
Aparece el nuevo precio en "libros" y una nueva fila de "actualización" en "control".
13- Cambie la fecha y hora del sistema a "martes 11:30 hs.". Actualice el precio de un libro
14- Realice un "select" sobre "libros" y sobre "control" para verificar que se han cargado los datos correspondientes.
Aparece el nuevo precio en "libros" y una nueva fila de "actualización" en "control".
15- Cambie la fecha y hora del sistema a "domingo 18:30 hs.". Intente borrar un libro.
Mensaje de error.
16- Cambie la fecha y hora del sistema a "miercoles 15 hs.". Intente borrar un libro.
Mensaje de error.
17- Cambie la fecha y hora del sistema a "sábado 11:55 hs.". Borre un libro
18- Realice un "select" sobre "libros" y sobre "control" para verificar que se han cargado los datos correspondientes.
Se ha eliminado el registro en "libros" y se ha cargado una nueva fila de "borrado" en "control".
drop table control; drop table libros; create table libros( codigo number(6), titulo varchar2(40), autor varchar2(30), editorial varchar2(20), precio number(6,2) ); create table control( usuario varchar2(30), fecha date, operacion varchar2(20) ); insert into libros values(100,'Uno','Richard Bach','Planeta',25); insert into libros values(103,'El aleph','Borges','Emece',28); insert into libros values(105,'Matematica estas ahi','Paenza','Nuevo siglo',12); insert into libros values(120,'Aprenda PHP','Molina Mario','Nuevo siglo',55); insert into libros values(145,'Alicia en el pais de las maravillas','Carroll','Planeta',35); create or replace trigger tr_cambios_libros before insert or update or delete on libros for each row begin if inserting then if ((to_char(sysdate,'dy','nls_date_language=SPANISH') in ('sáb')) and (to_number(to_char(sysdate,'HH24')) between 8 and 11)) then insert into control values (user, sysdate,'ingreso'); else raise_application_error(-20000,'Los ingresos sólo los Sab. de 8 a 12 hs.'); end if; end if; if deleting then if (to_char(sysdate,'dy','nls_date_language=SPANISH') in ('sáb')) and (to_number(to_char(sysdate,'HH24')) between 8 and 11) then insert into control values (user, sysdate,'borrado'); else raise_application_error(-20001,'Las eliminaciones solo los Sab. de 8 a 12 hs.'); end if; end if; if updating then if ((to_char(sysdate,'dy','nls_date_language=SPANISH') in ('lun','mar','mié','jue','vie')) and (to_number(to_char(sysdate,'HH24')) between 8 and 19)) or ((to_char(sysdate,'dy','nls_date_language=SPANISH') in('sáb')) and (to_number(to_char(sysdate,'HH24')) between 8 and 11))then insert into control values (user, sysdate,'actualización'); else raise_application_error(-20002,'Las actualizaciones solo de L a V de 8 a 20 o S de 8 a 12 hs.'); end if; end if; end tr_cambios_libros; / insert into libros values(150,'El experto en laberintos','Gaskin','Planeta',25); insert into libros values(150,'El experto en laberintos','Gaskin','Planeta',25); insert into libros values(150,'El experto en laberintos','Gaskin','Planeta',25); select *from libros; select *from control; update libros set precio=45 where codigo=150; update libros set precio=45 where codigo=150; update libros set precio=45 where codigo=150; select *from libros; select *from control; update libros set precio=50 where codigo=150; select *from libros; select *from control; delete from libros where codigo=150; delete from libros where codigo=150; delete from libros where codigo=150; select *from libros; select *from control;