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 ARTUROinsert into librosDesde usuario SYSTEM
values( 1, 'Harry Potter y la camara secreta','J. K. Rowling','everest',20.50);
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;