create or replace 
PROCEDURE IMPORTA_PRODUCTO_SITE
IS
   V_CDPRODUTO VARCHAR2(10);
   V_CDFILIAL  VARCHAR2(4);
   V_CDARVPROD VARCHAR2(20);
   V_PRODEXIST INTEGER;
   V_CODEERRO  VARCHAR2(10);
   V_MENSERRO  VARCHAR2(100);
BEGIN
   FOR C_PRODFILI IN
       (SELECT U.CDSITESAP, U.CDPRODSAP, U.SGUNIDADE, U.IDINTERFACE, U.TPINTERFACE
          FROM USR_SAP_PRODUTO_SITE U
         WHERE U.DTINTERFACEDEST IS NULL
         ORDER BY U.DTINTERFACEORI)
   LOOP
      V_CDARVPROD := C_PRODFILI.CDPRODSAP;
      
      BEGIN
         SELECT P.CDPRODUTO
           INTO V_CDPRODUTO
           FROM MARCPROD M, PRODUTO P
          WHERE M.CDPRODUTO  = P.CDPRODUTO
            AND M.CDPRODSAP  = V_CDARVPROD
            AND P.SGUNIDADE  = C_PRODFILI.SGUNIDADE;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_CDPRODUTO := NULL;

            INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
            VALUES(C_PRODFILI.IDINTERFACE, C_PRODFILI.TPINTERFACE, 5, SYSDATE, 1, 'Producto '||V_CDARVPROD||' no registrado');

            UPDATE USR_SAP_PRODUTO_SITE SET STATUS = 2
             WHERE IDINTERFACE = C_PRODFILI.IDINTERFACE;
         WHEN TOO_MANY_ROWS THEN
            V_CDPRODUTO := NULL;

            INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
            VALUES(C_PRODFILI.IDINTERFACE, C_PRODFILI.TPINTERFACE, 5, SYSDATE, 1, 'M'||CHR(225)||'s de un producto con el codigo '|| V_CDARVPROD);

            UPDATE USR_SAP_PRODUTO_SITE SET STATUS = 2
             WHERE IDINTERFACE = C_PRODFILI.IDINTERFACE;
      END;
      
      BEGIN
         SELECT F.CDFILIAL
           INTO V_CDFILIAL
           FROM FILIAL F, PARAMFILIAL P
          WHERE F.CDFILIAL = P.CDFILIAL
            AND P.CDEXFILIAL = C_PRODFILI.CDSITESAP;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_CDFILIAL := NULL;
            
            INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
            VALUES(C_PRODFILI.IDINTERFACE, C_PRODFILI.TPINTERFACE, 5, SYSDATE, 1, 'Site '||C_PRODFILI.CDSITESAP||' no registrado');

            UPDATE USR_SAP_PRODUTO_SITE SET STATUS = 2
             WHERE IDINTERFACE = C_PRODFILI.IDINTERFACE;
         WHEN TOO_MANY_ROWS THEN
            V_CDFILIAL := NULL;
            
            INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
            VALUES(C_PRODFILI.IDINTERFACE, C_PRODFILI.TPINTERFACE, 5, SYSDATE, 1, 'M'||CHR(225)||'s de un site con el codigo '|| C_PRODFILI.CDSITESAP);

            UPDATE USR_SAP_PRODUTO_SITE SET STATUS = 2
             WHERE IDINTERFACE = C_PRODFILI.IDINTERFACE;
      END;
      
      IF V_CDPRODUTO IS NOT NULL THEN
         IF V_CDFILIAL IS NOT NULL THEN
            SELECT COUNT(1)
              INTO V_PRODEXIST
              FROM PRODFILI PF
             WHERE PF.CDFILIAL  = V_CDFILIAL
               AND PF.CDPRODUTO = V_CDPRODUTO;
            
            IF V_PRODEXIST = 0 THEN
               BEGIN
                  INSERT INTO PRODFILI(CDFILIAL, CDPRODUTO)
                  VALUES (V_CDFILIAL, V_CDPRODUTO);
                  
                  INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
                  VALUES (C_PRODFILI.IDINTERFACE, C_PRODFILI.TPINTERFACE, 5, SYSDATE, 0, 'Producto '|| V_CDARVPROD ||' registrado con '||CHR(233)||'xito para el site '|| V_CDFILIAL);
                  
                  UPDATE USR_SAP_PRODUTO_SITE SET DTINTERFACEDEST = SYSDATE, STATUS = 0
                   WHERE IDINTERFACE = C_PRODFILI.IDINTERFACE;
               EXCEPTION
                  WHEN OTHERS THEN
                     V_CODEERRO := SQLCODE;
                     V_MENSERRO := SQLERRM;

                     INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
                     VALUES (C_PRODFILI.IDINTERFACE, C_PRODFILI.TPINTERFACE, 5, SYSDATE, 1, 'Error en la operaci'||CHR(243)||'n del producto por site. Error: '||V_CODEERRO || '- '||V_MENSERRO);

                     UPDATE USR_SAP_PRODUTO_SITE SET STATUS = 2
                      WHERE IDINTERFACE = C_PRODFILI.IDINTERFACE;
                     COMMIT;
               END;
            ELSE
               INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
               VALUES (C_PRODFILI.IDINTERFACE, C_PRODFILI.TPINTERFACE, 5, SYSDATE, 0, 'Producto atualizado con '||CHR(233)||'xito');

               UPDATE USR_SAP_PRODUTO_SITE SET DTINTERFACEDEST = SYSDATE, STATUS = 0
                WHERE IDINTERFACE = C_PRODFILI.IDINTERFACE;
            END IF;
         END IF;
      END IF;
   END LOOP;
   
   COMMIT;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('IMPORTA_PRODUCTO_SITE','5.45.XXX'); END;
/