En este apartado vamos a tratar una herramienta muy potente e importante proporcionada por PL/SQL para programar nuestra base de datos y mantener la integridad y seguridad que son los disparadores o triggers en inglés.
Pero, ¿qué es un disparador?
Un disparador no es más que un procedimiento que es ejecutado cuando se realiza alguna sentencia sobre la BD, o sus tablas, y bajo unas circunstancias establecidas a la hora de definirlo.
Los disparadores pueden ser de tres tipos:
- De tablas
- De sustitución
- De sistema
Un disparador puede ser lanzado antes o después de realizar la operación que lo lanza. Por lo que tendremos disparadores BEFORE
y disparadores AFTER
.
Disparadores de Tablas
Normalmente previenen transacciones erróneas o nos permiten implementar restricciones de integridad o seguridad, o automatizar procesos. Son los más utilizados.
Se ejecutan cuando se realiza alguna sentencia de manipulación de datos sobre una tabla dada. Puede ser lanzado al insertar, al actualizar o al borrar de una tabla, por lo que tendremos disparadores INSERT
, UPDATE
o DELETE
(o mezclados).
Puede ser lanzado una vez por sentencia (FOR STATEMENT
) o una vez por cada fila a la que afecta (FOR EACH ROW
). Por lo que tendremos disparadores de sentencia y disparadores de fila.
De sustitución
No se ejecutan ni antes ni después, sino en lugar de (se conocen como triggers INSTEAD OF). Sólo se pueden asociar a vistas y a nivel de fila.
De sistema
Se ejecutan cuando se produce una determinada operación sobre la BD, se crea una tabla, se conecta un usuario, etc. Los eventos que se pueden detectar son por ejemplo: LOGON, LOGOFF, CREATE, DROP, etc y el momento puede ser tanto BEFORE
como AFTER
.
Un disparador no es más que un procedimiento y puede ser usado para:
- Llevar a cabo auditorías sobre la historia de los datos en nuestra base de datos.
- Garantizar complejas reglas de integridad.
- Automatizar la generación de valores derivados de columnas.
- Etc.
Cuando diseñamos un disparador debemos tener en cuenta que:
- No debemos definir disparadores que dupliquen la funcionalidad que ya incorpora Oracle.
- Debemos limitar el tamaño de nuestros disparadores, y si estos son muy grandes codificarlos por medio de subprogramas que sean llamados desde el disparador.
- Cuidar la creación de disparadores recursivos.