CREATE OR REPLACE PROCEDURE EXPORTA_PRODUTO_XML
IS
   V_XML XMLTYPE;
   V_CDNVPRODUTO    VARCHAR2(1);
   V_CDPRODUTO      VARCHAR2(10);
   BO_PRODUTO       BOOLEAN;
   V_CONT           INTEGER;
   V_PRODUTOSENVIAR VARCHAR2(4000);
   V_CDEXPPRODXML   VARCHAR2(20);
   
   CURSOR C_PRODUTO(C_PRODUTOS IN VARCHAR2) IS
      SELECT CDPRODUTO
        FROM PRODUTO
       WHERE INSTR(C_PRODUTOS, '_'||CDARVPROD||'_') > 0;
BEGIN
   BO_PRODUTO := TRUE;
   
   SELECT MAX(CDNVPRODUTO) CDNVPRODUTO
     INTO V_CDNVPRODUTO
     FROM PRODUTO;
   
   WHILE BO_PRODUTO LOOP
      
      SELECT COUNT(1)
        INTO V_CONT
        FROM PRODUTO
       WHERE CDNVPRODUTO = V_CDNVPRODUTO
         AND CDCLASFISC IS NOT NULL
         AND ((SYSTAX_DTEXPXML IS NULL) OR (DTULTATUPROD > SYSTAX_DTEXPXML));
      
      BO_PRODUTO := V_CONT > 0;
      
      V_PRODUTOSENVIAR := '_';
      
      FOR C_PRODUTOSENVIAR IN (SELECT CDARVPROD
                                 FROM PRODUTO
                                WHERE CDNVPRODUTO = V_CDNVPRODUTO
                                  AND CDCLASFISC IS NOT NULL
                                  AND ((SYSTAX_DTEXPXML IS NULL) OR (DTULTATUPROD > SYSTAX_DTEXPXML))
                                  AND ROWNUM <= 10)
      LOOP
         V_PRODUTOSENVIAR := V_PRODUTOSENVIAR || C_PRODUTOSENVIAR.CDARVPROD || '_';
      END LOOP;
   
      IF (V_PRODUTOSENVIAR <> '_') THEN

         V_XML := EXPORTA_PRODUTO_SYSTAX(V_PRODUTOSENVIAR);
      
         NOVO_CODIGO('EXPORTAPRODUTOXML', V_CDEXPPRODXML);
         V_CDEXPPRODXML := SUBSTR(V_CDEXPPRODXML, 11, 10);

         INSERT INTO ENVIA_PROD_XML
            (CDPRODUTOINI,
             CDPRODUTOFIN,
             ARQ_XML)
         VALUES
            (V_CDEXPPRODXML,
             V_CDEXPPRODXML,
             V_XML.GetStringVal());
      END IF;
      
      OPEN C_PRODUTO(V_PRODUTOSENVIAR);
      LOOP
         FETCH C_PRODUTO INTO V_CDPRODUTO;
      
         EXIT WHEN C_PRODUTO%NOTFOUND;
      
         UPDATE PRODUTO
            SET SYSTAX_DTEXPXML = SYSDATE
          WHERE CDPRODUTO = V_CDPRODUTO;
      END LOOP;
      
      CLOSE C_PRODUTO;
      
      COMMIT;
   END LOOP;

   DELETE 
     FROM ENVIA_PROD_XML
    WHERE REPLACE(TRIM(ARQ_XML),CHR(10),'') = '<systaxCadastro/>';
   
   COMMIT;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('EXPORTA_PRODUTO_XML','6.35.033'); END;
/
