ALTER TABLE CONSUMOREAL ADD NRCONSREAL VARCHAR2(10) NULL
/

DECLARE
   V_COUNT        NUMBER;
   V_NOVOCODIGO   VARCHAR2(20);
BEGIN
   V_COUNT := 0;
   V_NOVOCODIGO := NULL;

   FOR C_DADOS IN (SELECT CDFILIAL, DTCONSUMO, CDPRODUTO
                     FROM CONSUMOREAL
                    ORDER BY CDFILIAL, DTCONSUMO, CDPRODUTO)
   LOOP
      NOVO_CODIGO('CONSUMOREAL'||C_DADOS.CDFILIAL, V_NOVOCODIGO);
      V_NOVOCODIGO := SUBSTR(V_NOVOCODIGO,11,10);

      UPDATE CONSUMOREAL
         SET NRCONSREAL = V_NOVOCODIGO
       WHERE CDFILIAL  = C_DADOS.CDFILIAL
         AND DTCONSUMO = C_DADOS.DTCONSUMO
         AND CDPRODUTO = C_DADOS.CDPRODUTO;

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

ALTER TABLE CONSUMOREAL MODIFY NRCONSREAL VARCHAR2(10) NOT NULL
/

ALTER TABLE CONSUMOREAL DROP CONSTRAINT PK_CONSUMOREAL
/
DROP INDEX PK_CONSUMOREAL
/

ALTER TABLE CONSUMOREAL
   ADD CONSTRAINT PK_CONSUMOREAL PRIMARY KEY (CDFILIAL, NRCONSREAL)
/

CREATE INDEX EST00627_FK ON CONSUMOREAL (CDFILIAL, DTCONSUMO, CDPRODUTO)
/