✅ Explicação
A instrução DELETE
serve para excluir uma ou mais linhas de uma tabela ou view. Se usada numa view, a exclusão afeta a tabela base — exceto se tiver um gatilho INSTEAD OF DELETE
, que então assume o controle.
📌 Usos mais comuns
-
Excluir registros com base em uma condição (
WHERE
) -
Excluir uma linha específica com uso de cursor (
WHERE CURRENT OF
) -
Limpar toda a tabela (sem
WHERE
) — cuidado! -
Trabalhar com views atualizáveis
🧾 Sintaxe
🔹 Forma pesquisada (Searched DELETE)
DELETE FROM nome_tabela
WHERE condição;
🔹 Forma posicionada (Positioned DELETE — com cursor)
DELETE FROM nome_tabela
WHERE CURRENT OF nome_cursor;
🧪 Exemplos práticos
Exemplo 1: Deletar funcionários com salário abaixo de 1500
DELETE FROM EMPREGADOS
WHERE SALARIO < 1500;
Exemplo 2: Deletar uma linha específica (ID = 1050)
DELETE FROM EMPREGADOS
WHERE ID = 1050;
Exemplo 3: Usando cursor em COBOL para deletar
EXEC SQL
DECLARE CUR_EMP CURSOR FOR
SELECT ID FROM EMPREGADOS
WHERE SALARIO < 1000
FOR UPDATE
END-EXEC.
EXEC SQL
OPEN CUR_EMP
END-EXEC.
PERFORM UNTIL SQLCODE ≠ 0
EXEC SQL
FETCH CUR_EMP INTO :WS-ID
END-EXEC
IF SQLCODE = 0
EXEC SQL
DELETE FROM EMPREGADOS
WHERE CURRENT OF CUR_EMP
END-EXEC
END-IF
END-PERFORM.
EXEC SQL
CLOSE CUR_EMP
END-EXEC.
⚠️ Regras importantes
-
NUNCA esqueça o
WHERE
se quiser deletar apenas linhas específicas. Sem ele, você apaga tudo. -
É preciso ter privilégio
DELETE
na tabela. -
Se a condição usar colunas, também precisa ter privilégio
SELECT
. -
Subconsultas no
WHERE
também exigemSELECT
sobre as tabelas referenciadas.
💡 Dicas
-
Use
COMMIT
apósDELETE
em programas para garantir que a exclusão foi finalizada. -
Em ambientes de teste, sempre rode primeiro um
SELECT
com a mesma condição antes de dar oDELETE
. -
Prefira apagar por chave primária (ID) sempre que possível.
✅ Conclusão
O DELETE
é um dos comandos mais poderosos (e perigosos) do SQL. Use com responsabilidade. Quando bem usado, é a ferramenta ideal pra manter o banco de dados limpo e íntegro.