Trigger no SQL – Para que Server e Como Funciona?

Você sabe o que é um trigger no SQL ou como ele funciona? Hoje eu vou te mostrar como ele pode te ajudar no seu trabalho!

Um trigger no SQL é um gatilho: um bloco de código que o banco executa sozinho sempre que um comando INSERT, UPDATE ou DELETE acontece em uma tabela. Ele é criado com CREATE OR REPLACE TRIGGER e pode disparar antes (BEFORE) ou depois (AFTER) do comando, inclusive para bloquear a operação.

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

O que você aprende neste vídeo

Resposta rápida: Aula de SQL no Oracle ensina a criar um trigger DML com CREATE OR REPLACE TRIGGER, disparado antes de um INSERT, UPDATE ou DELETE. O exemplo bloqueia alterações numa tabela aos sábados, domingos e segundas: descobre o dia com SYSDATE e TO_CHAR, e usa RAISE_APPLICATION_ERROR para impedir o comando com uma mensagem customizada.

Neste vídeo (23 min):

  • 4:00 - A trigger desta aula é do tipo DML, disparada quando um INSERT, UPDATE ou DELETE acontece numa tabela, antes (BEFORE) ou depois (AFTER) do comando
  • 5:00 - Sintaxe: CREATE OR REPLACE TRIGGER nome, BEFORE ou AFTER do evento, ON tabela, e o bloco BEGIN e END com o código
  • 8:00 - Descobre o dia atual com SELECT SYSDATE FROM DUAL, convertido para o nome do dia com TO_CHAR
  • 9:00 - Usa TRIM junto do TO_CHAR porque a conversão de data para dia pode adicionar espaços extras ao texto
  • 13:00 - Uma estrutura IF compara o dia atual com sábado, domingo ou segunda-feira para decidir se bloqueia a alteração
  • 16:00 - RAISE_APPLICATION_ERROR dispara um erro customizado, com um número a partir de -20000 e uma mensagem, e impede o INSERT, UPDATE ou DELETE de acontecer
  • 18:00 - Testa a trigger tentando um DELETE na tabela de funcionários, que é bloqueado com a mensagem de erro criada
  • 20:00 - Removendo a condição de segunda-feira do código e recriando a trigger, o mesmo DELETE passa a ser executado normalmente
  • 21:00 - Uma trigger não serve só para bloquear: pode disparar qualquer outra ação, como um INSERT automático em outra tabela
  • 22:00 - ALTER TRIGGER nome DISABLE desliga a trigger sem apagá-la, e DROP TRIGGER a remove de vez

Trechos do vídeo:

  • Um trigger é disparado automaticamente quando um INSERT, UPDATE ou DELETE acontece numa tabela, antes (BEFORE) ou depois (AFTER) do comando
  • RAISE_APPLICATION_ERROR cria um erro customizado, com número e mensagem, que impede o comando de ser executado dentro da trigger
  • ALTER TRIGGER nome DISABLE desliga uma trigger sem apagá-la, útil quando a restrição precisa valer só em certos momentos
  • Uma trigger não serve só para bloquear operações: ela também pode disparar outra ação, como um INSERT automático em outra tabela, sempre que o evento configurado acontece

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Criação de Trigger no SQL

Você sabe o que é um trigger? Sabe como criar um trigger no SQL? Hoje eu vou te ensinar o que é esse tal de trigger e como você pode criar um no SQL.

Você provavelmente já ouviu esse termo em outros lugares, mas hoje vamos aplicá-lo dentro do SQL para auxiliar em algumas atividades!

Ícone SQLSQL Impressionador

Domine a linguagem mais importante do Mundo para quem trabalha com Dados, seja para se destacar na sua empresa atual, para conseguir um diferencial em processos seletivos ou até mesmo para entrar em áreas de dados.

Começar agoraSeta para a direita
Fundo SQLTelas SQL
Luz SQL

Como Criar Trigger no SQL

O trigger nada mais é do que um gatilho, ou seja, é algo que vai desencadear uma ação. Você pode pensar que o trigger é o fiscal do SQL.

Então sempre que ele ver alguma coisa que o ativa ele vai responder com uma ação. Vou te mostrar um exemplo para melhorar o entendimento, mas você pode pensar como uma função SE.

Se uma ação x acontecer nós vamos executar uma ação y em resposta a primeira ação!

O nosso exemplo vai ser a criação de um trigger no Oracle Database (Oracle SQL Developer) onde ele vai ser disparado sempre antes que um comando INSERT for feito na tabela EMPLOYEES.

Caso o dia em que o INSERT/UPDATE/DELETE seja feito em uma SEGUNDA-FEIRA, SÁBADO ou DOMINGO então esses comandos serão abortados.

Então o nosso exemplo é simples, sempre que utilizar um desses comandos nosso gatilho será acionado, mas caso esses comandos sejam utilizados em uma segunda, sábado ou domingo eles serão abortados.

Então o nosso gatilho vai funcionar sempre que um comando desse for utilizado, mas ele só vai ter uma ação nesses 3 dias específicos.

Criando o trigger no SQL com as condições
Criando o trigger no SQL com as condições

Aqui nós temos a estrutura do nosso código. Esse código inicia TRIM(TO_CHAR(sysdate, ‘DAY’)) é para obter o dia atual.

Dessa forma nós vamos conseguir utilizar esse dia também dentro da nossa função IF (função SE) para verificar se o dia é segunda, sábado ou domingo.

Dessa forma vamos conseguir retornar um erro, onde esse número -20001 é a própria Oracle que fornece, então você pode buscar esses erros para saber mais sobre eles.

Além disso podemos inserir uma mensagem que vai aparecer ao usuário quando ele tentar utilizar um desses comandos nesses dias.

Caso o usuário utilize esses comandos em outros dias da semana o trigger vai ser ativado da mesma maneira, mas não terá nenhuma ação, pois o nosso IF só funciona se o dia for segunda, sábado ou domingo.

Para criar a trigger nós vamos utilizar o comando CREATE OR REPLACE TRIGGER + o nome que você quiser dar para o seu gatilho.

Em seguida temos a ação que o trigger vai fazer se é antes (BEFORE) ou depois (AFTER) um comando.

Agora podemos aplicar um comando DELETE por exemplo para verificar o funcionamento do nosso trigger. Lembrando que esse teste está sendo feito em uma segunda-feira.

Testando o comando DELETE para verificar o funcionamento do gatilho
Testando o comando DELETE para verificar o funcionamento do gatilho

Aqui você nota que temos um erro do nosso trigger, ou seja, ele mostrou a nossa mensagem de erro e falou que ela vem do trigger que criamos.

Para verificar se de fato o gatilho funcionou podemos visualizar os dados do nosso banco e verificar se o funcionário 190 ainda está lá!

Confirmando que o funcionário não foi excluído
Confirmando que o funcionário não foi excluído

Aqui podemos concluir que o nosso trigger funcionou, pois estamos executando uma ação em uma segunda feira.

Agora se você quiser testar se realmente funciona pode testar em outro dia, ou pode simplesmente tirar a segunda-feira das condições iniciais.

Então quando for utilizar o comando DELETE vai ver que o funcionário será excluído da base de dados!

Perguntas frequentes

1. Para que serve um trigger em um banco de dados?

O trigger funciona como um fiscal do banco de dados: ele vigia a tabela e responde sozinho a um evento, sem ninguém precisar rodar nada. Serve para aplicar regras de negócio e evitar erros, como impedir que registros sejam alterados ou apagados em dias em que ninguém deveria mexer neles.

2. Qual a diferença entre trigger BEFORE e AFTER?

É o momento em que o gatilho dispara. O BEFORE roda antes de o comando ser aplicado, o que permite validar a operação e até abortá-la. O AFTER roda depois que a alteração já foi gravada, sendo mais usado para reagir à mudança. No exemplo da aula usamos um BEFORE.

3. Como criar um trigger no Oracle SQL Developer?

Comece com CREATE OR REPLACE TRIGGER seguido do nome do gatilho. Depois defina o momento e o evento, como BEFORE INSERT na tabela EMPLOYEES, e escreva no corpo a condição a ser testada. Na aula, o dia atual vem de TRIM(TO_CHAR(sysdate, ‘DAY’)) e alimenta um IF.

4. Um trigger pode impedir que um comando seja executado?

Pode. Quando a condição do gatilho é atendida, ele devolve um erro e a operação é abortada, sem gravar nada na tabela. No exemplo da aula, tentar apagar um funcionário na segunda-feira retorna o erro -20001 com uma mensagem personalizada, e o registro continua no banco.

Conclusão – Trigger no SQL

Nessa aula eu te mostrei como criar um trigger no SQL para que você possa executar ações quando algum comando for executado.

Isso é muito importante até para impedir que erros aconteçam ou que pessoas executem atividades que não deveriam.

Hashtag Treinamentos

Para acessar outras publicações de SQL, clique aqui!


Quer aprender mais sobre SQL com um minicurso básico gratuito?