CREATE OR REPLACE TRIGGER DTULTATU_ITEMPRECOGER
BEFORE INSERT OR UPDATE OR DELETE
ON ITEMPRECOGER FOR EACH ROW
DECLARE
   V_CDTABEPREC VARCHAR2(03);
   V_DTINIVGPREC VARCHAR2(10);
   V_CDPRODUTO VARCHAR2(20);
   V_COUNT NUMBER;
   V_DSCHAVE VARCHAR2(100);
BEGIN
   IF INSERTING OR UPDATING THEN
      V_CDTABEPREC := NVL(:NEW.CDTABEPREC, :OLD.CDTABEPREC);
      V_DTINIVGPREC := TO_CHAR(NVL(:NEW.DTINIVGPREC, :OLD.DTINIVGPREC), 'DD/MM/YYYY');
      V_CDPRODUTO := NVL(:NEW.CDPRODUTO, :OLD.CDPRODUTO);
      V_DSCHAVE := V_CDTABEPREC||'|'||V_DTINIVGPREC||'|'||V_CDPRODUTO;
      V_COUNT := 0;
      BEGIN
         SELECT COUNT(*)
           INTO V_COUNT
           FROM CTRLATUALTAB
          WHERE NMTABELA = 'ITEMPRECOGER'
            AND DSCHAVE = V_DSCHAVE;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_COUNT := 0;
      END;
      IF V_COUNT = 0 THEN
         INSERT INTO CTRLATUALTAB
            (NMTABELA, DSCHAVE, DTULTATU)
         VALUES
            ('ITEMPRECOGER', V_DSCHAVE, SYSDATE);
      ELSE
         UPDATE CTRLATUALTAB
            SET DTULTATU = SYSDATE
          WHERE NMTABELA = 'ITEMPRECOGER'
            AND DSCHAVE = V_DSCHAVE;
      END IF;
   END IF;
   IF INSERTING THEN
      UPDATE PRODOCORRE
      SET DTULTATUPOCO = SYSDATE
      WHERE CDPRODUTO  = :NEW.CDPRODUTO;

      UPDATE PRODLOJA
      SET DTULTATUPLOJ = SYSDATE
      WHERE CDPRODUTO  = :NEW.CDPRODUTO;
   END IF;
   IF DELETING THEN
      INSERT INTO DELETECACHE (NMTABLECACHE, CDFILICACHE, DSKEYCACHE, DTULTATUCACH)
                       VALUES ('ITEMPRECOGER', NULL, 'CDTABEPREC='||:OLD.CDTABEPREC||';DTINIVGPREC='||TO_CHAR(:OLD.DTINIVGPREC,'DD/MM/YYYY')||';CDPRODUTO='||:OLD.CDPRODUTO||';CDPRPAITABPR='||:OLD.CDPRPAITABPR||';', SYSDATE);
   END IF;
END;
/

ALTER TABLE ITEMPRECOGER MODIFY DTULTATU DEFAULT SYSDATE
/