111 - Disparador de múltiples eventos


Primer problema:

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".

Ver solución

 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;

 


Retornar