CREATE OR REPLACE
PROCEDURE EXPORTA_PRODUTO_SAP
IS
BEGIN
   FOR C_PRODUTOS IN
       (SELECT P.CDARVPROD AS CDPRODUTO, P.NMPRODUTO, P.SGUNIDADE, P.VRFATOCONV, P.CDCLASFISC, CASE SUBSTR(P.NMPRODUTO, 1, 10)
                                                                                                  WHEN '(INATIVO) '
                                                                                                  THEN 'I'
                                                                                                  ELSE 'A'
                                                                                               END IDPRODATIVPR
          FROM PRODUTO P, USR_SAP_PRODUTO U
         WHERE P.CDARVPROD = U.CDPRODUTO(+)
           AND P.CDNVPRODUTO = (SELECT LENGTH(REGEXP_REPLACE(CDPICTPROD, '\w'))+1 FROM PARAMGERAL WHERE CDPARGERAL = '0001')
           AND P.VRFATOCONV IS NOT NULL
           AND U.CDPRODUTO IS NULL
           AND P.SGUNIDADE IS NOT NULL
         UNION ALL
        SELECT P.CDARVPROD AS CDPRODUTO, P.NMPRODUTO, P.SGUNIDADE, P.VRFATOCONV, P.CDCLASFISC, CASE SUBSTR(P.NMPRODUTO, 1, 10)
                                                                                                  WHEN '(INATIVO) '
                                                                                                  THEN 'I'
                                                                                                  ELSE 'A'
                                                                                               END IDPRODATIVPR
          FROM PRODUTO P, USR_SAP_PRODUTO U, (SELECT MAX(IDINTERFACE) AS IDINTERFACE
                                                FROM USR_SAP_PRODUTO
                                               GROUP BY CDPRODUTO) UM
         WHERE P.CDARVPROD = U.CDPRODUTO
           AND U.TPINTERFACE = 'E'
           AND U.IDINTERFACE = UM.IDINTERFACE 
           AND P.SGUNIDADE IS NOT NULL
           AND TO_CHAR(P.USR_DTATUEXP_SAP, 'YYYYMMDDHH24MISS') > TO_CHAR(U.DTINTERFACEORI, 'YYYYMMDDHH24MISS'))
   LOOP
      INSERT INTO USR_SAP_PRODUTO(CDPRODUTO,NMPRODUTO,SGUNIDADE,VRFATORCONV,CDNCM,IDPRODATIVPR,
                                  IDINTERFACE,TPINTERFACE,DTINTERFACEORI,DTINTERFACEDEST, STATUS,APPORIGEM,APPDESTINO)
      VALUES (C_PRODUTOS.CDPRODUTO, C_PRODUTOS.NMPRODUTO, C_PRODUTOS.SGUNIDADE, C_PRODUTOS.VRFATOCONV, C_PRODUTOS.CDCLASFISC, C_PRODUTOS.IDPRODATIVPR,
              USR_SAP_IDINTERFACE.NEXTVAL, 'I', SYSDATE, NULL, 1, 1, 2);
   END LOOP;
   FOR C_UPDPRODUTOS IN
       (SELECT P.CDARVPROD AS CDPRODUTO, P.NMPRODUTO, P.SGUNIDADE, P.VRFATOCONV, P.CDCLASFISC, CASE SUBSTR(P.NMPRODUTO, 1, 10)
                                                                                                  WHEN '(INATIVO) '
                                                                                                  THEN 'I'
                                                                                                  ELSE 'A'
                                                                                               END IDPRODATIVPR, U.TPINTERFACE
          FROM PRODUTO P, USR_SAP_PRODUTO U, (SELECT MAX(IDINTERFACE) AS IDINTERFACE
                                                FROM USR_SAP_PRODUTO
                                               GROUP BY CDPRODUTO) UM
         WHERE U.IDINTERFACE = UM.IDINTERFACE
           AND P.CDARVPROD   = U.CDPRODUTO
           AND U.TPINTERFACE <> 'E'
           AND P.SGUNIDADE IS NOT NULL
           AND TO_CHAR(P.USR_DTATUEXP_SAP, 'YYYYMMDDHH24MISS') > TO_CHAR(U.DTINTERFACEORI, 'YYYYMMDDHH24MISS'))
   LOOP
      INSERT INTO USR_SAP_PRODUTO(CDPRODUTO, NMPRODUTO, SGUNIDADE, VRFATORCONV, CDNCM, IDPRODATIVPR,
                                  IDINTERFACE, TPINTERFACE, DTINTERFACEORI, DTINTERFACEDEST, STATUS,APPORIGEM,APPDESTINO)
      VALUES (C_UPDPRODUTOS.CDPRODUTO, C_UPDPRODUTOS.NMPRODUTO, C_UPDPRODUTOS.SGUNIDADE, C_UPDPRODUTOS.VRFATOCONV, C_UPDPRODUTOS.CDCLASFISC, C_UPDPRODUTOS.IDPRODATIVPR,
              USR_SAP_IDINTERFACE.NEXTVAL, 'A', SYSDATE, NULL, 1, 1, 2);
   END LOOP;
   FOR C_DELPRODUTOS IN
       (SELECT CDPRODUTO, NMPRODUTO, SGUNIDADE, VRFATORCONV, TPINTERFACE, CDNCM, IDPRODATIVPR
          FROM (SELECT U.CDPRODUTO, U.NMPRODUTO, U.SGUNIDADE, U.VRFATORCONV, U.TPINTERFACE, U.CDNCM, U.IDPRODATIVPR
                  FROM (SELECT U.CDPRODUTO, MAX(TO_CHAR(U.DTINTERFACEORI, 'YYYYMMDDHH24MISS')) DTINTERFACEORI
                          FROM USR_SAP_PRODUTO U, PRODUTO P
                         WHERE U.CDPRODUTO = P.CDARVPROD(+)
                           AND P.CDPRODUTO IS NULL
                           AND P.SGUNIDADE IS NOT NULL
                         GROUP BY U.CDPRODUTO) DEL, USR_SAP_PRODUTO U
                 WHERE DEL.CDPRODUTO = U.CDPRODUTO
                   AND DEL.DTINTERFACEORI = (TO_CHAR(U.DTINTERFACEORI, 'YYYYMMDDHH24MISS'))
                 ORDER BY U.CDPRODUTO) ULT
         WHERE TPINTERFACE <> 'E')
   LOOP
      INSERT INTO USR_SAP_PRODUTO(CDPRODUTO, NMPRODUTO, SGUNIDADE, VRFATORCONV, CDNCM, IDPRODATIVPR,
                                  IDINTERFACE, TPINTERFACE, DTINTERFACEORI, DTINTERFACEDEST, STATUS,APPORIGEM,APPDESTINO)
      VALUES (C_DELPRODUTOS.CDPRODUTO, C_DELPRODUTOS.NMPRODUTO, C_DELPRODUTOS.SGUNIDADE, C_DELPRODUTOS.VRFATORCONV, C_DELPRODUTOS.CDNCM, C_DELPRODUTOS.IDPRODATIVPR,
              USR_SAP_IDINTERFACE.NEXTVAL, 'E', SYSDATE, NULL, 1, 1, 2);
   END LOOP;
   COMMIT;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('EXPORTA_PRODUTO_SAP','5.42.XXX'); END;
/