CREATE OR REPLACE TRIGGER DTULTATU_ROTFABRICA
BEFORE INSERT OR UPDATE OR DELETE
ON ROTFABRICA FOR EACH ROW

BEGIN
   IF INSERTING THEN
      :NEW.DTULTATURTFA := SYSDATE;
   END IF;
   IF UPDATING THEN
      IF (NVL(:OLD.CDPRODUTO,0)    <> NVL(:NEW.CDPRODUTO,0))    OR
         (NVL(:OLD.CDSUBPRODUTO,0) <> NVL(:NEW.CDSUBPRODUTO,0)) OR
         (NVL(:OLD.QTSUBPRODROT,0) <> NVL(:NEW.QTSUBPRODROT,0)) OR
         (NVL(:OLD.IDIMPPRODROT,0) <> NVL(:NEW.IDIMPPRODROT,0)) OR
         (NVL(:OLD.DSAPELIDOKDS,0) <> NVL(:NEW.DSAPELIDOKDS,0)) OR
         (NVL(:OLD.DTINIVGPRODROT,TO_DATE('01/01/0001','DD/MM/YYYY')) <> NVL(:NEW.DTINIVGPRODROT,TO_DATE('01/01/0001','DD/MM/YYYY'))) OR
         (NVL(:OLD.DTFINVGPRODROT,TO_DATE('01/01/0001','DD/MM/YYYY')) <> NVL(:NEW.DTFINVGPRODROT,TO_DATE('01/01/0001','DD/MM/YYYY'))) THEN
         :NEW.DTULTATURTFA := SYSDATE;

         IF NVL(:OLD.CDSUBPRODUTO,0) <> NVL(:NEW.CDSUBPRODUTO,0) THEN
            INSERT INTO DELETECACHE (NMTABLECACHE, CDFILICACHE, DSKEYCACHE, DTULTATUCACH)
            VALUES ('ROTFABRICA', '', 'CDPRODUTO='||:OLD.CDPRODUTO||';CDSUBPRODUTO='||:OLD.CDSUBPRODUTO||';NRSEQROTFAB='||:OLD.NRSEQROTFAB||';', SYSDATE);
         END IF;
      END IF;   
   END IF;
   IF DELETING THEN
      INSERT INTO DELETECACHE (NMTABLECACHE, CDFILICACHE, DSKEYCACHE, DTULTATUCACH)
                       VALUES ('ROTFABRICA', '', 'CDPRODUTO='||:OLD.CDPRODUTO||';CDSUBPRODUTO='||:OLD.CDSUBPRODUTO||';NRSEQROTFAB='||:OLD.NRSEQROTFAB||';', SYSDATE);
   END IF;
END;
/

ALTER TABLE ROTFABRICA MODIFY DTULTATURTFA DEFAULT SYSDATE
/

UPDATE ROTFABRICA SET DTULTATURTFA = SYSDATE WHERE DTULTATURTFA IS NULL
/