martes, 28 de diciembre de 2021

Tutorial Oracle PL-SQL (II)

16. Triggers

Un trigger ejecuta automáticamente un código cada vez que se realiza una acción concreta sobre la base de datos.

  • Puede revisar las inserciones y modificaciones en la tabla para asegurar la coherencia de datos
  • Registra todos los cambios realizados y el usuario que los hizo 
  • No pueden ser invocados directamente, son procesos automáticos
  • No devuelven ni reciben parametros
  • No devuelven consultas sql

 

Tipos de triggers:

  • before: se ejecutan antes de la acción sobre la base de datos
  • after: se ejecutan después de la acción sobre la base de datos
  • de evento: pueden ser por un insert, update o delete
  • de nivel: a nivel de fila afectada por la acción ó a nivel de sentencia que puede afectar a varias filas

 

Ejemplo de disparador tipo before, antes del evento insert.


 create or replace trigger tr_entrada_diario
before insert
on libros
begin
    insert into control values ( user, sysdate);
end tr_entrada_diario;

 

Si se insertan un registro en la tabla con dos usuarios diferentes quedará registrado automaticamente en la tabla control

Desde usuario ARTURO
 insert into libros 
values( 1, 'Harry Potter y la camara secreta','J. K. Rowling','everest',20.50);
Desde usuario SYSTEM
  insert into ARTURO.libros 
values( 2, 'Harry Potter y la orden del fenix','J. K. Rowling','everest',20.50);

18. Triggers FOR EACH ROW

Otro ejemplo es cuando se borran registros. En el caso que se borren libros, por cada libro borrado se escribe un registro en la tabla CONTROL.

  create or replace trigger tr_borrado_libro
before delete
on libros
for each row
begin
    insert into control values (user, sysdate,'BORRADO');
end tr_borrado_libro;
-- Una vez creado el disparador se borra un registro de la tabla libros
DELETE from ARTURO.LIBROS where CODIGO = 5;

No hay comentarios: