Boa tarde, Ricardo! Veja se isto ajuda: É um bloco PL/SQL que, a cada 500 registros atualizados, efetua um COMMIT, para não comprometer a área de Rollback... Obs: Efetuar commit a cada 500 registros é só um exemplo... Este valor pode ser maior ou menor, de acordo com a área de Rollback...
DECLARE vQtLinhas NUMBER(3) := 0; BEGIN FOR Reg IN (SELECT CAMPO_PK ID_TABELA -- Campo chave da tabela FROM TABELA) LOOP UPDATE TABELA SET CAMPO_CHAR = '' WHERE CAMPO_PK = Reg.ID_TABELA; vQtLinhas := vQtLinhas + 1; -- Registra a Qtde de Linhas atualizadas IF vQtLinhas = 500 THEN -- Quando o total de linhas atualizadas atingir 500, efetua um COMMIT; COMMIT; vQtLinhas := 0; END IF; END LOOP; COMMIT; -- Este COMMIT é importante para atualizar o último bloco de linhas que não chegou a 500 (Ex: As últimas 387 linhas) END; Em 17 de outubro de 2017 11:34, Ricardo Sá ricardo....@terra.com.br [oracle_br] <oracle_br@yahoogrupos.com.br> escreveu: > > > Bom dia, a todos. > > > > Solicito a gentileza se alguém pode me ajudar a resolver uma questão. > > > > Preciso realizar um UPDATE monstro em um tabela 11.500.000 (11,5 milhoes > de linhas). > > > > O update é sobre uma coluna CHAR(1) com o valor “ “. > > > > Pensei em um bloco PLSQL, mas me falta neste momento criatividade para > montar este bloco. > > > > Obs.: O banco é 11.2.0.4.0 (Enterprise Edition) sobre Oracle RAC com 2 > nós.... esta tabela tem 35 indices... (sei que é absurdo, mas é o ERP que > foi construído desta forma). > > > > Alguem poderia, me ajudar nesta questão. > > > > Ricardo Sá > > (11) 98286-0048 > > > -- Atenciosamente, *Gustavo Guedes de Sene*