Substitua o cursor por um cursor com bulk collection e utilize um forall no lugar do for....
2008/6/19 Usina Mandu S/A - Renato Ricci <[EMAIL PROTECTED]>: > Cara, uma coisa que ajuda muito é desativar todos os índices da tabela2, > pois a cada update que o oracle dá ele automaticamente atualiza a arvore de > índices, ou seja, se vc for dar 15000 updates em uma tabela, ele ira > atualizar 15000 vezes os índices, consumindo recurso da maquina. > > Tente desabilitar os índices, fazer a migração, depois criar os índices > novamente.. Com certeza vc terá um ganho de perfomence.. > > Outra coisa que vc pode estar utilizando é o comando MERGE.. de uma olhada > no google de como utilizá-lo. > > Abraço, > > _______________________________________ > > Renato Ribeiro Ricci > > Analista de Sistemas > > _____ > > De: oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br> [mailto: > oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br>] Em > nome de euripedes.junior > Enviada em: quarta-feira, 18 de junho de 2008 14:33 > Para: oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br> > Assunto: [oracle_br] Problema com atualização pesada em tabela > > > Olá pessoal tudo bom???? > > Bom tenho uma dúvida eu preciso atualizar um campo tabela x com > referencia ao campo da tabela y. Meu problema é o seguinte está > demorando muito pra finalizar a procedure. Eu estou pegando os > resultados da tabela y e jogando para um cursor do tipo ROWTYPE e > depois estou colocando o UPDATE dentro de um LOOP para atualizar a > tabela x, não sei se essa e a melhor forma de fazer, as segestões q > vcs tiverem eu agradeco. > > ##### INFO TABELAS ##### > > TABELA1 (17598 Linhas) > > Tabela2 (17045 Linhas) > > ##### PROCEDURE ##### > > create or replace > PROCEDURE "TESTE" AS > BEGIN > DECLARE > > COUNTER NUMBER := 0; > CURSOR c_sb IS > > SELECT B1_COD, B1_CUTMAN > FROM TABELA1 > WHERE B1_TIPO IN ('01','02','03','04'); > atualiza c_sb%ROWTYPE; > > BEGIN > > OPEN c_sb; > LOOP > FETCH c_sb INTO atualiza; > EXIT WHEN c_sb%NOTFOUND; > > COUNTER := COUNTER + 1; > > UPDATE TABELA2 TB2 SET > TB2.B9_CUTMAN = atualiza.B1_CUTMAN > WHERE TB2.B9_DATA = '20080131' > AND TB2.B9_COD = atualiza.B1_COD; > > IF COUNTER > 1000 THEN > COUNTER := 0; > COMMIT; > END IF; > > END LOOP; > CLOSE c_sb; > END; > COMMIT; > END TESTE; > > [As partes desta mensagem que não continham texto foram removidas] > > > -- Thiago Azevedo Accenture Brazil Services - AO Carrefour Work: 55 11 51888492 Mobile: 55 13 81453524 email: [EMAIL PROTECTED] MSN IM: [EMAIL PROTECTED] [As partes desta mensagem que não continham texto foram removidas]