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]