GPO ( Grupo de Profissionais Oracle )
A maior comunidade Oracle do Brasil !

DELETE X TRUNCATE

Existem dúvidas básicas que nos assolam durante o nosso dia-a-dia e neste artigo vamos abordar uma delas.

Primeiramente para testarmos e acompanharmos tudo criaremos uma tabela e vamos colocar dados nela.

CREATE TABLE TESTE (   NUMERO INT );  DECLARE  
NUM NUMBER := 0;
BEGIN
FOR i in 0..10000
LOOP
INSERT INTO TESTE VALUES (NUM);
NUM := NUM + 1;
END LOOP;
commit;
END;

De acordo com o script executado nós inserimos na tabela 10001 registros, pois a posição 0 também conta. Durante nosso estudo usaremos muito o seguinte SQL para verificarmos quantos registros temos na tabela TESTE.

select count(*) from teste;

Vamos então a parte que nos interessa, começando pelo DELETE.

Esse comando é um comando do tipo DML, onde conseguimos excluir dados de tabelas. Ele pode ter o uso da cláusula WHERE para que somente uma parte dos dados seja excluída.

OBS: a palavra FROM é opicional. ex DELETE FROM TABELA OU DELETE TABELA.

Bom vamos ver o comportamento que a tabela teste tem se executarmos um delete para excluir do numero 0 ao 5000.

delete teste t where t.numero between 0 and 5000

Pronto, vamos agora executar o comando ROLLBACK que vai fazer a reversão de nossa exclusão e executar novamente o SQL para vermos a quantidade de registros. Muito bem, agora estamos com todos os dados na tabela novamente, se você quiser excluir de fato sem fazer a reversão execute um COMMIT;

Mas e o TRUNCATE como funciona? O TRUNCATE é um comando DDL, é um comando bem mais rápido em performace do que o DELETE, pois com ele as posições de HWM são zeradas, fazendo com o que o resultado final seja quase igual ao do DELETE (o esvaziamento da tabela). Como ele não gera registros no redo log, o comando não aceita um ROLLBACK. Então muito cuidado ao utilizar esse comando. Nele também não temos a opção de usar a cláusula WHERE, ou seja, não há como excluir apenas uma parte dos dados.

Vamos executar e ver qual seu resultado.

TRUNCATE TABLE TESTE;

E novamente execute o nosso SQL para contar os registros. Bem simples né!? Podemos ir mais afundo no assunto, porém nesse artigo vimos de maneira básica a diferença entre esses dois comandos.

Um grande abraço

Share

You may also like...

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *