CREATE OR REPLACE PROCEDURE PRODUTO_CDNIVEANTE
IS
   V_COUNT          NUMBER;
   V_CDPAIPRODUTO   VARCHAR(20);
BEGIN
   V_COUNT := 0;
   V_CDPAIPRODUTO := NULL;

   FOR C_DADOS IN (SELECT CDPRODUTO, CDARVPROD, CDNVPRODUTO
                     FROM PRODUTO
                    ORDER BY CDARVPROD)
   LOOP
      BEGIN
         SELECT MAX(P.CDARVPROD)
           INTO V_CDPAIPRODUTO
           FROM PRODUTO P
          WHERE P.CDNVPRODUTO = (C_DADOS.CDNVPRODUTO - 1)
            AND C_DADOS.CDARVPROD LIKE P.CDARVPROD||'%';
      EXCEPTION
         WHEN OTHERS THEN V_CDPAIPRODUTO := NULL;
      END;

      UPDATE PRODUTO
         SET CDPRODNIVANTE = V_CDPAIPRODUTO
       WHERE CDPRODUTO = C_DADOS.CDPRODUTO;

      V_COUNT := V_COUNT + 1;

      IF V_COUNT > 250 THEN
         V_COUNT := 0;
         COMMIT;
      END IF;
   END LOOP;
   COMMIT;
END;
/

