Eu tive uma situação em que precisava deletar mais 100 mil linhas numa
tabela com quase 2 milhões de registros em pouco tempo.
Solução:
Criei uma procedure que primeiro criar um cursor com todos os dados que
precisam ser apagados e depois inicio um loop commitando a cada linha e me
retornando a quantidade registros deletados.
Porém o select é baseado num índice para ser mais eficiente.
Quando ao delete, não é necessário, pois uso o rowid.
 
 
CREATE OR REPLACE  PROCEDURE  "SPDEL" (
              nLoops out number 
              ) is
              nLoop number(10) := 0 ;
              col_1 char(18);
              CURSOR nLooping is
                SELECT COUNT(*) FROM TABELA WHERE CONDICAO
              CURSOR cur IS
                SELECT ROWID FROM TABELA
                 WHERE CONDICAO
              BEGIN
                  OPEN cur
                  FETCH cur INTO col_1;
                  While (cur%FOUND) LOOP
                  BEGIN
                      DELETE FROM TABELA WHERE ROWID = col_1  ; 
                        COMMIT;
                      FETCH cur INTO col_1;
                      nLoop := nLoop + 1;
                  END;
                  END LOOP;
                  CLOSE cur;
                     OPEN nLooping;
                     FETCH nLooping INTO nLoops;
                     CLOSE nLooping;
              END;
 
 
 
Marcelo Alberto Lauschner 
Tecnologia e Informática
Auto Pratense Ltda
* - Fax: (0XX54) 3242-3615
* - E-mail: HYPERLINK
"mailto:[EMAIL PROTECTED]"[EMAIL PROTECTED]
 
   _____  

De: [email protected] [mailto:[EMAIL PROTECTED] Em
nome de Rodrigo Mufalani
Enviada em: sexta-feira, 26 de janeiro de 2007 14:27
Para: [email protected]
Assunto: Re: [oracle_br] Delete em Tabela
 
posta o delete...

> Mensagem Original:
> Data: 11:28:13 26/01/2007
> De: G.A.S <HYPERLINK "mailto:gas1980%40gmail.com"[EMAIL PROTECTED]>
> Assunto: [oracle_br] Delete em Tabela

> Olá pessoal, todos bem?
>
> Seguinte, estou com um problema com o tempo que estou gastando para dar um
> delete em uma tabela.
> Tenho uma tabela com 100mil registros, e destes preciso deletar cerca de
> 40mil, só que pra isso estou gastando muito tempo e como o sistema está em
> homologação, precisaria de uma help para ver como melhorar a forma desse
> delete.
>
> Alguém tem uma idéia?
>
> Abraços.
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>

Atenciosamente,

Rodrigo Mufalani
HYPERLINK "mailto:mufalani%40bsdmail.org"[EMAIL PROTECTED]
(21) 910739169
----------------------------------------------------------------
Aqui na Oi Internet você ganha ou ganha. Além de acesso grátis com
qualidade, ganha contas ilimitadas de email com 1 giga cada uma. Ganha
espaço ilimitado para hospedar sua página pessoal. Ganha flog, suporte
grátis e muito mais. Baixe grátis o Discador em
HYPERLINK "http://www.oi.com.br/discador"http://www.oi.-com.br/discador e
comece a ganhar.

Agora, se o seu negócio é voar na internet sem pagar uma fortuna,
assine Oi Internet banda larga a partir de R$ 9,90. Clique em
HYPERLINK "http://www.oi.com.br/bandalarga"http://www.oi.-com.br/bandalarg-a
e aproveite essa moleza!
 

--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.410 / Virus Database: 268.17.11/652 - Release Date: 25/1/2007
15:32


-- 
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.5.410 / Virus Database: 268.17.11/652 - Release Date: 25/1/2007
15:32
 


[As partes desta mensagem que não continham texto foram removidas]

Responder a