martes, 21 de mayo de 2013

Triggers con inserting, updating y deleting Oracle



CREATE OR REPLACE TRIGGER TR_AUDITA
BEFORE INSERT OR DELETE OR UPDATE
ON TABLA_REGISTRO
FOR EACH ROW
DECLARE
BEGIN
IF INSERTING  THEN 
:NEW.USUARIOMOD:=USER;
:NEW.FECHAMOD:=SYSDATE;
INSERT INTO TABLA_AUDITA VALUES(USER,SYSDATE,'INGRESO EN TABLA_REGISTRO','NOMBRE '||:NEW.NOMBRE);
END IF;
IF UPDATING THEN 
:NEW.USUARIOMOD:=USER;
:NEW.FECHAMOD:=SYSDATE;
   INSERT INTO TABLA_AUDITA VALUES(USER,SYSDATE,'ACTUALIZO EN TABLA_REGISTRO' ,'NOMBRE '||:OLD.NOMBRE||'NOMBRE '||:NEW.NOMBRE);
END IF;
IF   DELETING THEN 
   INSERT INTO TABLA_AUDITA VALUES(USER,SYSDATE,'BORRO EN TABLA_REGISTRO','NOMBRE '||:OLD.NOMBRE);
END IF;

END;
/

Hay que recordar que si vamos a insertar (inserting) no ponemos :old. ya que es un nuevo registro y por ende no existe.
Para updating ponemos :new y :old, ya que si actualizamos va a ser de un registro existente y de ello se va a derivar un registro nuevo.
En el deleting solo ponemos :old debido a que vamos a eliminar un registro viejo, no va a ser un registro nuevo ovbiamente.


No hay comentarios:

Publicar un comentario