DECLARE
   V_CONT_COMMIT INT;
   V_QTDE_COMMIT INT;
BEGIN
    V_CONT_COMMIT := 0;
    V_QTDE_COMMIT := 500;
    FOR C_MARCPROD IN
      (SELECT
         PRODUTO.CDARVPROD,
         MARCPROD.CDPRODUTO,
         MARCPROD.CDMARCA
       FROM
         MARCPROD,
         PRODUTO
       WHERE
         MARCPROD.CDPRODUTO = PRODUTO.CDPRODUTO)
    LOOP
       FOR C_PRODUTO IN
        (SELECT
           PRODUTO.CDPRODUTO
         FROM
           PRODUTO
         WHERE
           PRODUTO.CDARVPROD LIKE C_MARCPROD.CDARVPROD||'%' AND
           PRODUTO.CDPRODESTO IS NOT NULL                   AND
           NOT EXISTS
            (SELECT
               CDPRODUTO
             FROM
               MARCPRODCOMP
             WHERE
               MARCPRODCOMP.CDPRODUTO    = C_MARCPROD.CDPRODUTO  AND
               MARCPRODCOMP.CDMARCA      = C_MARCPROD.CDMARCA    AND
               MARCPRODCOMP.CDPRMARCOMPL = PRODUTO.CDPRODUTO))
       LOOP
          INSERT INTO MARCPRODCOMP(CDPRODUTO, CDMARCA, CDPRMARCOMPL)
          VALUES(C_MARCPROD.CDPRODUTO, C_MARCPROD.CDMARCA, C_PRODUTO.CDPRODUTO);
          V_CONT_COMMIT := V_CONT_COMMIT + 1;
          IF (V_CONT_COMMIT = V_QTDE_COMMIT) THEN
             V_CONT_COMMIT := 0;
             COMMIT;
          END IF;
       END LOOP;
    END LOOP;
END;
/
COMMIT
/