Los Triggers (disparador) son bloques de código que se ejecutan o disparan,
automáticamente cuando cierto evento ocurre. La principal diferencia con otros
procedimientos de la base de datos es que los triggers no se pueden llamar
directamente. Oracle maneja la ejecución del trigger o triggers cuando un
evento se presenta. Es un sub programa que tiene instrucciones de PL y SQL. Las instrucciones de SQL solo pueden ser de manera directa, instrucciones de DML.
Algunas de
las funciones que el trigger puede ejecutar son:
•Permitir o restringir la modificación de una tabla
•Generar automáticamente columnas derivadas
•Forzar la integridad de la base de datos
•Proveer auditoria y logging
•Prevenir transacciones invalidas
•Permitir un mayor control de cómo entra y es mantenida la información en
las tablas y asegura que el dato entre con el formato apropiado.
•Permitir aplicar reglas del negocio directamente sobre los datos para
evitar que el usuario infrinja estas reglas.
•Asegurar que solo ciertos
usuarios puedan modificar los datos
Oracle tiene diferentes tipos de triggers para permitir el desarrollo de
diversas tareas. Estos son:
•Triggers de Instrucción (Statememt Triggers): Estos triggers son
disparados por una instrucción o instrucciones que actuan sobre una tabla o
vista. Pueden ser asociados a una instrucción de INSERT, UPDATE, o DELETE o cualquier combinación de estas.
•Triggers de Registro (Row Trigger): Se pueden crear triggers que se disparan por cada renglón
afectado y se definen como los triggers de instrucción salvo por dos diferencias:
•Primero, incluye la cláusula FOR EACH ROW
•La segunda es que se puede disparar el trigger antes de afectar el renglón BEFORE ..FOR EACH
ROW trigger.
•INSTEAD OF triggers: Este trigger se ejecuta antes o después de ejecutar ciertas instrucciones que disparan un trigger , que sera sustituido por uno nuevo determinado por el programador.
•Triggers de eventos del sistema (SYSTEM event triggers): Oracle solo permite crear triggers sobre
ciertos eventos del sistema. Estos eventos son:
•Database startup
•Database shutdown
•Server errors
Ejemplo:
SQL> create trigger
ad_startup
2 after STARTUP
3 on DATABASE
4 begin
5 -- do some stuff here
6 end;
••USER event trigger Los USER EVENT TRIGGERS tambien se conocen como CLIENT TRIGGERS, son
triggers que pueden estar asociados con acciones o eventos diferentes a INSERT,
UPDATE y DELETE. Estos eventos incluyen el BEFORE y AFTER trigger para las siguientes instrucciones y
comandos:
•CREATE •ALTER •DROP •ANALYZE •ASSOCIATE STATISTICS •AUDIT
•DISASSOCIATE
STATISTICS •NOAUDIT •GRANT
•COMMENT •REVOKE •RENAME
•TRUNCATE
La sintaxis básica para crear un trigger de instrucción es:
CREATE TRIGGER <Nombre Trigger>
<AFTER/BEFORE> INSERT [OR DELETE OR UPDATE [OF <NomCampo>] ON <NOM_tabla>
[Declaración de Parámetro
[DECLARE
Declaración de Variables]
[Declaración de Parámetro
[DECLARE
Declaración de Variables]
BEGIN
Cuerpo (Instrucciones PL/SQL (DML))
RETURN <VALOR>
END;
END;
/
Debido a que un trigger no se ejecuta de manera directa, si no que se dispara al presentarse el evento, NO usa parámetros. El trigger siempre va asociado a UNA tabla nada mas.
NOTA:
Se cuenta con tres variables de tipo Boolean de gran utilidad:
INSERTING Verdadera cuando el trigger se disparo por un INSERT
UPDATING Verdadera cuando el trigger se disparo por un UPDATE
DELETIGN Verdadera cuando el trigger se disparo por un DELTE
Tambien se pueden ver los valores originales y los valores modificados usando
:old.<nom_campo>
:new.<nom_campo>
NOTA:
Se cuenta con tres variables de tipo Boolean de gran utilidad:
INSERTING Verdadera cuando el trigger se disparo por un INSERT
UPDATING Verdadera cuando el trigger se disparo por un UPDATE
DELETIGN Verdadera cuando el trigger se disparo por un DELTE
Tambien se pueden ver los valores originales y los valores modificados usando
:old.<nom_campo>
:new.<nom_campo>
Ejemplo
Crear un trigger que registre en la tabla bitacora el nombre de la tabla, movimiento realizado, usuario y fecha en la que se elimino o se actualizo el salario de un empleado.
CREATE TRIGGER Bitacora_EMP
AFTER DELETE OR UPDATE OF SAL ON EMP
AFTER DELETE OR UPDATE OF SAL ON EMP
DECLARE
VMov varchar2(30);
BEGIN
If DELETING then
Vmov;= 'BORRA';
else
Vmov;= 'ACTUALIZA';
end if;
Insert into bitacora (tabla, usuario, fecha, movimiento, observaciones)
values ( 'EMP', user, sysdate, Vmov, null);
Vmov;= 'BORRA';
else
Vmov;= 'ACTUALIZA';
end if;
Insert into bitacora (tabla, usuario, fecha, movimiento, observaciones)
values ( 'EMP', user, sysdate, Vmov, null);
END;
/
No hay comentarios:
Publicar un comentario