CREATE OR REPLACE TRIGGER ATUALIZA_PRODLOJA_PRODFILI
AFTER INSERT OR UPDATE
ON PRODFILI FOR EACH ROW
DECLARE
   V_COUNT NUMBER;
   V_CDPRODUTO VARCHAR2(20);
   V_CDFILIAL VARCHAR2(04);
BEGIN
   V_CDPRODUTO := NVL(:NEW.CDPRODUTO, :OLD.CDPRODUTO);
   V_CDFILIAL := NVL(:NEW.CDFILIAL, :OLD.CDFILIAL);
   IF (:NEW.IDPRODATIV = 'A') OR (:NEW.IDPRODATIV IS NULL AND :OLD.IDPRODATIV = 'A') THEN
      FOR C_CAD IN
         (WITH PLMAX AS
            (SELECT PL.CDFILIAL, PL.CDLOJA, MAX(PRL.CDARVPROD) CDARVPROD
               FROM PRODLOJANIVEL PL, PRODUTO P, PRODUTO PRL
              WHERE PL.CDPRODUTO = PRL.CDPRODUTO
                AND P.CDPRODUTO = V_CDPRODUTO
                AND P.CDARVPROD LIKE PRL.CDARVPROD||'%'
                AND PL.CDFILIAL = V_CDFILIAL
              GROUP BY PL.CDFILIAL, PL.CDLOJA)
          SELECT PL.CDFILIAL, PL.CDLOJA, V_CDPRODUTO CDPRODUTO, PL.NRSEQIMPRPROD, PL.NRSEQIMPRPROD2,
                 PL.NRSEQIMPRPUXA, PL.IDIMPCANITEM
            FROM PRODUTO P, PRODUTO PRF, PLMAX, (SELECT PL.*, NVL(PREXC.CDARVPROD, 'XXX') CDARVPREXC
                                                   FROM PRODLOJANIVEL PL LEFT JOIN PRODUTO PREXC
                                                                                ON PREXC.CDPRODUTO = PL.CDPRODEXCECAO) PL

           WHERE P.CDPRODUTO = PL.CDPRODUTO
             AND P.CDARVPROD = PLMAX.CDARVPROD
             AND PRF.CDPRODUTO = V_CDPRODUTO
             AND PRF.CDARVPROD NOT LIKE PL.CDARVPREXC||'%') LOOP
         V_COUNT := 0;
         BEGIN
            SELECT COUNT(*)
              INTO V_COUNT
              FROM PRODLOJA
             WHERE CDPRODUTO = C_CAD.CDPRODUTO
               AND CDFILIAL = C_CAD.CDFILIAL
               AND CDLOJA = C_CAD.CDLOJA;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_COUNT := 0;
         END;
         IF V_COUNT = 0 THEN
            INSERT INTO PRODLOJA
               (CDFILIAL, CDLOJA, CDPRODUTO, IDIMPCANITEM, NRSEQIMPRPROD,
                NRSEQIMPRPUXA, NRSEQIMPRPROD2, CDPORIMPPROD)
            VALUES
               (C_CAD.CDFILIAL, C_CAD.CDLOJA, C_CAD.CDPRODUTO, C_CAD.IDIMPCANITEM, C_CAD.NRSEQIMPRPROD,
                C_CAD.NRSEQIMPRPUXA, C_CAD.NRSEQIMPRPROD2, 'COM1');
         ELSE
            UPDATE PRODLOJA
               SET IDIMPCANITEM = C_CAD.IDIMPCANITEM,
                   NRSEQIMPRPROD = C_CAD.NRSEQIMPRPROD,
                   NRSEQIMPRPUXA = C_CAD.NRSEQIMPRPUXA,
                   NRSEQIMPRPROD2 = C_CAD.NRSEQIMPRPROD2
             WHERE CDFILIAL = C_CAD.CDFILIAL
               AND CDLOJA = C_CAD.CDLOJA
               AND CDPRODUTO = C_CAD.CDPRODUTO;
         END IF;
      END LOOP;
   END IF;
END;
/