16/05/2020

Deletar registros banco dados ORACLE

Certamente é importante entender que o este artigo, deletar registros em tabela de banco de dados ORACLE, tratará o conteúdo sobre linguagem SQL – DELETE, mais especificamente como deletar registros dentro de uma tabela de banco de dados.

Primeiramente, quando se prensa em alterar registros em Banco de Dados (BD) é importante rever dois conceitos: criação de tabelas, inserção de registros e alteração de registros. Dessa forma, é recomendado a leitura dos artigos: Inserir registros banco dados ORACLE, e Alterar registros banco dados ORACLE.

Desse modo, para facilitar, será usada a mesma tabela e registros utilizados nos dois artigos citados acima.

Sintaxe DELETE

Finalmente, agora pode-se partir para a sintaxe do comando DELETE. Só para ilustrar, como apresentado abaixo, o DELETE tem como componentes essenciais de sua sintaxe, o nome_da_tabela, e a cláusula que possibilita aplicar critério(s) de filtro(s).

DELETE 
  FROM nome_da_tabela 
[WHERE]
   [critério(s) de filtro(s)];

Por outro lado, é importante pontuar alguns aspectos sobre a aplicação deste comando:

  • Um comando DELETE aplica a exclusão de registro(s) em uma única tabela.
  • Um comando DELETE, pode excluir nenhuma, uma, ou várias linhas de registros.
  • Pode ser aplicado sem a cláusula WHERE, só que dessa forma afetará todas as linhas de registros da tabela (exemplificando, se a tabela tiver mil registros, as mil serão excluídas).
  • A cláusula WHERE filtra as linhas de registros que serão excluídas em um comando DELETE.

Experimento Prático

Para gerar o experimento prático será utilizada a tabela PESSOA e seus registros inseridos no artigo Inserir registros banco dados ORACLE Entretanto, para facilitar segue abaixo sua ilustração da tabela com seus registros.

PESSOA
IDNOMEGENERODATA_NASCIMENTO
1MARIAF12/03/1989
3PAULOM12/03/2006

Da mesma forma, este experimento prático, pode ser aplicado através de uma máquina virtual, ou uma máquina normal que tenha uma versão do ORACLE instalada (pode ser a versão Express Edition).

Ou, pode ser usada o Oracle Live SQL, versão online via browser para testes disponibilizado pela própria Oracle (necessita apenas ter uma conta válida em seu site).

Este artigo utilizara da ferramenta online Oracle Live SQL para realizar os experimentos práticos.

Aplicando Comandos DELETE

DELETE FROM PESSOA 
 WHERE ID = 1;
-- 1 row(s) deleted.
DELETE FROM PESSOA;
-- 2 row(s) deleted.
DELETE FROM PESSOA 
 WHERE GENERO = 'F';
-- 1 row(s) deleted.
DELETE FROM PESSOA 
 WHERE ID = 1 AND GENERO = 'F';
-- 1 row(s) deleted.

A saber, todos os valores relacionados a campos texto, como as colunas NOME e GENERO deve estar entre apóstrofos.

Por outro lado, para passar com precisão a data para o ORACLE, é importante o uso da função TO_DATE. Função que converte um texto que está entre apóstrofos em data no formato a seguir, como acontece no campo DATA_NASCIMENTO.

Explicação do SCRIPT acima

O DELETE da linha 1:

  • Utiliza a chave primária para excluir apenas o registro específico.

O DELETE da linha 4:

  • Apaga todas as linhas de registros da tabela PESSOA. A aplicação do comando sem WHERE apaga todas as linhas de registros.

O DELETE da linha 6:

  • Faz a exclusão de todas as linhas de registros que tenham o valor F (feminino) no campo GENERO.

O DELETE da linha 9:

  • Exclui todos os registros que tenham o valor 1 para o campo ID e (AND), o valor F no campo GENERO. Ou seja, é possível utilizar composição de filtros na cláusula WHERE.

Características

Reforçando as características do comando:

  • Deleta apenas registros de uma única tabela.
  • Não é preciso informar colunas, pois ao aplicar o comando DELETE o mesmo afeta toda a linha, independentemente da coluna.
  • Em bancos de dados transacionais os DELETE só são efetivados com o uso do COMMIT, caso não queira que seja efetivado pode anular com ROLLBACK.
  • Campo data, ou data hora, usar a função TO_DATE para informar valor (isso impede inversão de data devido ao formato americano ou latino).

Boas Práticas

  • Como boas práticas não se devem aplicar um DELETE sem a cláusula WHERE:
    • Pois pode excluir todas as linhas de registros.
    • Depois de aplicado um COMMIT para efetivar este DELETE, não seria possível voltar os valores anteriores.
    • Sendo essa recuperação muito complicada (em alguns casos só sendo possível com volta do BACKUP do banco de dados; e mesmo assim com perda de alguns valores).
    • Há riscos de mesmo com o BACKUP de não conseguir voltar todos os valores.
  • Outra boa prática é aplicar um SELECT com a mesma cláusula WHERE que o DELETE será aplicado, para verificar a quantidade de registros que podem sofrer a ação do comando.
    • Essa verificação antes de aplicar o DELETE pode indicar se algo está fora do esperado.
    • Exemplo: era para excluir uma linha, mas o SELECT de checagem tá mostrando 3 linhas que podem ser afetadas com este WHERE. 
    • Isso indica que o WHERE deve ser checado novamente, pode haver um erro, a falta de um filtro, etc.
    • Lembrando, o comando SELECT não alterar os registros, é um recurso de visualização de registros.
  • O ideal é aplicar um comando DELETE utilizando a(s) chave(s) primária(s) da tabela, isso garante que será excluída apenas um registro. Isso garante de certa forma, não excluir registros por acidente. Apesar que a dica anterior ajuda isso não acontecer.

Conclusão

Enfim, a exclusão de registros de um banco de dados é o passo importante relacionados a registros em uma tabela.

Por isso, o foco deste artigo foi o de apresentar de uma forma simples e prática o assunto deletar registros em tabela de banco de dados ORACLE.

Contudo, o uso de uma metodologia fundamentada em experimentos práticos dirigidos a um problema ajuda no entendimento e facilita no posterior aprofundamento do tema.  

 

Para ver mais artigos relacionados à Banco de Dados, clique aqui.

Share

Luis Alexandre da Silva

Professor e Consultor de tecnologia em desenvolvimento de sistemas. Possui mestrado em Ciência da Computação pela UNESP (2016), especialização em Gestão Integrada de Pessoas e Sistemas de Informação pela FIB (2008) e graduação em Análise de Sistemas pela Universidade do Sagrado Coração (1997). Por fim, tem experiência em Gerenciamento de Projetos, Linguagens de Programação e Banco de Dados. Atuando principalmente nos seguintes temas: ensino, gerenciamento de projetos, ITIL, Desenvolvimento WEB e processos BPO.

Você também pode gostar...

Deixe uma resposta

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