Trigger



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

TIPOS DE TRIGGERS

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]
BEGIN
           Cuerpo (Instrucciones PL/SQL (DML))
           RETURN <VALOR>
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>

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
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);  
END;
/



No hay comentarios:

Publicar un comentario