CREATE OR REPLACE TRIGGER DTULTATU_PROD_CASCADE
BEFORE INSERT OR UPDATE OR DELETE
ON PRODUTO FOR EACH ROW

BEGIN
   IF INSERTING THEN
      :NEW.DTULTATUPROD := SYSDATE;
      
      UPDATE PRODWEBSYNC
         SET IDATUALIZADO = 'N', DTULTALTPROD = SYSDATE
       WHERE CDPRODUTO = :NEW.CDPRODUTO;
   END IF;
   IF UPDATING THEN
      IF (NVL(:OLD.CDARVPROD     ,0) <> NVL(:NEW.CDARVPROD       ,0)) OR
         (NVL(:OLD.CDPRODUTO     ,0) <> NVL(:NEW.CDPRODUTO       ,0)) OR
         (NVL(:OLD.CDNVPRODUTO   ,0) <> NVL(:NEW.CDNVPRODUTO     ,0)) OR
         (NVL(:OLD.NMPRODUTO     ,0) <> NVL(:NEW.NMPRODUTO       ,0)) OR
         (NVL(:OLD.SGUNIDADE     ,0) <> NVL(:NEW.SGUNIDADE       ,0)) OR
         (NVL(:OLD.CDPRODESTO    ,0) <> NVL(:NEW.CDPRODESTO      ,0)) OR
         (NVL(:OLD.VRFATOCONV    ,0) <> NVL(:NEW.VRFATOCONV      ,0)) OR
         (NVL(:OLD.VRPESOUNID    ,0) <> NVL(:NEW.VRPESOUNID      ,0)) OR
         (NVL(:OLD.VRPEFATOCORR  ,0) <> NVL(:NEW.VRPEFATOCORR    ,0)) OR
         (NVL(:OLD.VRARREDREQ    ,0) <> NVL(:NEW.VRARREDREQ      ,0)) OR
         (NVL(:OLD.IDPRODATIVPR  ,0) <> NVL(:NEW.IDPRODATIVPR    ,0)) OR
         (NVL(:OLD.VRARREDCMP    ,0) <> NVL(:NEW.VRARREDCMP      ,0)) OR
         (NVL(:OLD.IDINTESAFR    ,0) <> NVL(:NEW.IDINTESAFR      ,0)) OR
         (NVL(:OLD.CDBARPRODUTO  ,0) <> NVL(:NEW.CDBARPRODUTO    ,0)) OR
         (NVL(:OLD.IDPRODCOMISS  ,0) <> NVL(:NEW.IDPRODCOMISS    ,0)) OR
         (NVL(:OLD.CDCIA         ,0) <> NVL(:NEW.CDCIA           ,0)) OR
         (NVL(:OLD.CDCICLO       ,0) <> NVL(:NEW.CDCICLO         ,0)) OR
         (NVL(:OLD.CDCLASSE      ,0) <> NVL(:NEW.CDCLASSE        ,0)) OR
         (NVL(:OLD.CDSETOR       ,0) <> NVL(:NEW.CDSETOR         ,0)) OR
         (NVL(:OLD.CDPRODINTE    ,0) <> NVL(:NEW.CDPRODINTE      ,0)) OR
         (NVL(:OLD.CDPROTECLADO  ,0) <> NVL(:NEW.CDPROTECLADO    ,0)) OR
         (NVL(:OLD.IDIMPPRODUTO  ,0) <> NVL(:NEW.IDIMPPRODUTO    ,0)) OR
         (NVL(:OLD.IDIMPRODUVEZ  ,0) <> NVL(:NEW.IDIMPRODUVEZ    ,0)) OR
         (NVL(:OLD.IDPESAPROD    ,0) <> NVL(:NEW.IDPESAPROD      ,0)) OR
         (NVL(:OLD.IDCOBTXSERV   ,0) <> NVL(:NEW.IDCOBTXSERV     ,0)) OR
         (NVL(:OLD.IDTIPOPROD    ,0) <> NVL(:NEW.IDTIPOPROD      ,0)) OR
         (NVL(:OLD.NMPRODIMPFIS  ,0) <> NVL(:NEW.NMPRODIMPFIS    ,0)) OR
         (NVL(:OLD.IDPRODPROD    ,0) <> NVL(:NEW.IDPRODPROD      ,0)) OR
         (NVL(:OLD.IDTPPRECO     ,0) <> NVL(:NEW.IDTPPRECO       ,0)) OR
         (NVL(:OLD.QTTARAPROD    ,0) <> NVL(:NEW.QTTARAPROD      ,0)) OR
         (NVL(:OLD.IDTIPOCOMPPROD,0) <> NVL(:NEW.IDTIPOCOMPPROD  ,0)) OR
         (NVL(:OLD.IDORIGPRODPR  ,0) <> NVL(:NEW.IDORIGPRODPR    ,0)) OR
         (NVL(:OLD.CDCLASFISC    ,0) <> NVL(:NEW.CDCLASFISC      ,0)) OR
         (NVL(:OLD.DTINIVGPROMOC, TO_DATE('31/12/1899','DD/MM/YYYY')) <> NVL(:NEW.DTINIVGPROMOC, TO_DATE('31/12/1899','DD/MM/YYYY'))) OR
         (NVL(:OLD.DTFINVGPROMOC, TO_DATE('31/12/1899','DD/MM/YYYY')) <> NVL(:NEW.DTFINVGPROMOC, TO_DATE('31/12/1899','DD/MM/YYYY'))) OR
         (NVL(:OLD.IDTEOROBRIG    ,0) <> NVL(:NEW.IDTEOROBRIG    ,0)) OR
       	 (NVL(:OLD.IDCONTROLAREFIL,0) <> NVL(:NEW.IDCONTROLAREFIL,0)) OR
       	 (NVL(:OLD.CDCEST         ,0) <> NVL(:NEW.CDCEST         ,0)) OR
		 (NVL(:OLD.IDTPPRODDEBCONS,0) <> NVL(:NEW.IDTPPRODDEBCONS,0)) OR
		 (NVL(:OLD.VRMINCONSUMODEB,0) <> NVL(:NEW.VRMINCONSUMODEB,0)) OR
		 (NVL(:OLD.CDCBENEF       ,0) <> NVL(:NEW.CDCBENEF       ,0)) OR		 
		 (NVL(:OLD.DSPRODVENDA    ,0) <> NVL(:NEW.DSPRODVENDA    ,0)) OR
		 (NVL(:OLD.NMPRODINGLES   ,0) <> NVL(:NEW.NMPRODINGLES   ,0)) OR
		 (NVL(:OLD.NMPRODESPANH   ,0) <> NVL(:NEW.NMPRODESPANH   ,0)) OR
		 (NVL(:OLD.IDIMPQRCODECAT   ,0) <> NVL(:NEW.IDIMPQRCODECAT, 0)) THEN

         :NEW.DTULTATUPROD := SYSDATE;
         
         UPDATE PRODWEBSYNC
            SET IDATUALIZADO = 'N', DTULTALTPROD = SYSDATE
          WHERE CDPRODUTO = :NEW.CDPRODUTO;

         UPDATE ROTFABLOCAL
            SET DTULTATURTFL = SYSDATE
          WHERE CDSUBPRODLOC = :OLD.CDPRODUTO;
        
         UPDATE ROTFABRICA
            SET DTULTATURTFA = SYSDATE
          WHERE CDSUBPRODUTO = :OLD.CDPRODUTO;

         UPDATE PRODUTOSEG
            SET DTULTATUPSEG = SYSDATE
          WHERE CDPRODUTO = :OLD.CDPRODUTO;	
      END IF;
   END IF;
   IF DELETING THEN
      DELETE FROM PRODFILI
      WHERE CDPRODUTO = :OLD.CDPRODUTO;

      DELETE POSESTDIA
      WHERE CDPRODUTO = :OLD.CDPRODUTO;

      DELETE POSESTCONS
      WHERE CDPRODUTO = :OLD.CDPRODUTO;

      DELETE POSESTATU
      WHERE CDPRODUTO = :OLD.CDPRODUTO;

      INSERT INTO DELETECACHE (NMTABLECACHE, CDFILICACHE, DSKEYCACHE, DTULTATUCACH)
                       VALUES ('PRODUTO', '', 'CDPRODUTO='||:OLD.CDPRODUTO||';', SYSDATE);
   END IF;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('DTULTATU_PROD_CASCADE','6.35.043'); END;
/
