A medida que a base de dados vai crescendo, o mesmo ocorre com a sua complexidade, e devido a isto, fica difícil implementar ou mesmo solucionar problemas que o banco deve executar antes ou depois de um evento específico.

Play no vídeo e aprenda.

Aprenda mais sobre a plataforma Java.

Formação Java
Clique aqui

No PostgresQL temos a nossa disposição as rules (regras), que são tarefas que podem ser realizadas em conjunto com as triggers responsáveis pela sua execução. Podemos utilizar as rules para implementar as Views no PostgreSQL, que são tabelas virtuais que nos ajudam no agrupamento de dados presentes em uma ou mais tabelas. Neste artigo aprenderemos a trabalhar com as triggers e sua relação com as Rules e as Views.

Uma visão geral sobre as triggers

Triggers, em termos de banco de dados, são as operações realizadas de forma espontânea para eventos específicos. Quando tratamos dos eventos, estes podem ser tanto um INSERT quanto um UPDATE, ou mesmo um DELETE. Assim, podemos definir determinadas operações que serão realizadas sempre que o evento ocorrer.

Quando nos referirmos a uma operação com uma trigger, esta é conhecida por trigger de função ou trigger function. Lembre-se que trigger e função de trigger são duas coisas diferentes, onde a primeira pode ser criada utilizando a instrução CREATE TRIGGER, enquanto que a última é definida pelo comando CREATE FUNCTION. Em linhas gerais, com as triggers definimos qual tarefa executar, e com as triggers de função definimos como essa tarefa será realizada.

Ao temos uma grande quantidade de acessos ao banco de dados por múltiplas aplicações, a utilização das triggers é de grande utilidade, e com isso, podemos manter a integridade de dados complexos, além de podermos acompanhar as mudanças ou o log a cada modificação ocorrida nos dados presentes numa tabela.

Exemplo de um Trigger

CREATE OR REPLACE FUNCTION public.validachavepessoa2()
  RETURNS trigger AS
$BODY$

  declare existe integer;

  begin 
    existe = (select count(1) from pessoa_fisica where id = NEW.pessoa_forn_id);
    if(existe <=0 ) then 
     existe = (select count(1) from pessoa_juridica where id = NEW.pessoa_forn_id);
    if (existe <= 0) then
      raise exception 'Não foi encontrado o ID ou PK da pessoa para realizar a associação';
     end if;
    end if;
    RETURN NEW;
  end;
  $BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public.validachavepessoa2()
  OWNER TO postgres;


O que é e como usar Trigger em SQL

Um Trigger é um procedimento armazenado no banco de dados que é chamado automaticamente sempre que ocorre um evento especial no banco de dados. Por exemplo, um acionador pode ser chamado quando uma linha é inserida em uma tabela especificada ou quando determinadas colunas da tabela estão sendo atualizadas.

Geralmente essas ações que acionam os triggers são alterações nas tabelas por meio de operações de inserção, exclusão e atualização de dados (insert, delete e update).

Existem duas classes de Triggers no SQL

Triggers DDL (Data Definition Language): Essa classe de Triggers é acionada em eventos que alteram a estrutura (como criar, modificar ou soltar uma tabela) ou em determinados eventos relacionados ao servidor, como alterações de segurança ou atualização de eventos estatísticos.

Triggers DML (Data Modification Language): Esta é a classe de Triggers mais usada. Nesse caso, o evento de disparo é uma declaração de modificação de dados; poderia ser uma instrução de inserção, atualização ou exclusão em uma tabela ou em uma exibição.

Os Triggers DML têm tipos diferentes

FOR ou AFTER [INSERT, UPDATE, DELETE]: Esses tipos de Triggers são executados após o término da instrução de disparo (inserção, atualização ou exclusão).

INSTEAD OF [INSERT, UPDATE, DELETE]: Ao contrário do tipo FOR (AFTER), os Triggers INSTEAD OF são executados em vez da instrução de disparo. Em outras palavras, esse tipo de trigger substitui a instrução de disparo. Isso é muito útil nos casos em que você precisa ter integridade referencial entre bancos de dados.

As vantagens do Trigger

  • Gerar alguns valores de coluna derivados automaticamente;
  • Aplicar a integridade referencial;
  • Registro de eventos e armazenamento de informações no acesso à tabela;
  • Auditoria;
  • Replicação síncrona de tabelas;
  • Imposição de autorizações de segurança;
  • Impedir transações inválidas.

Como usar Trigger em SQL

A instrução CREATE TRIGGER permite criar um novo trigger que é acionado automaticamente sempre que um evento como INSERTDELETE ou UPDATE ocorre em uma tabela.

A sintaxe da instrução CREATE TRIGGER:

CREATE  TRIGGER  [Nome_Trigger] // é o nome definido pelo usuário para o novo trigger
ON  [Nome_tabela] // é a tabela à qual o trigger se aplica.
AFTER {[INSERT],[UPDATE],[DELETE]} 
[NOT  FOR  REPLICATION] // A opção instrui o SQL Server a não acionar o gatilho quando a modificação de dados for feita como parte de um processo de replicação.
AS
{sql_statements}

A sintaxe acima é genérica, mas é a base para grande parte dos bancos de dados, como veremos a seguir.

Exemplo de Triggers no Oracle

A Oracle também forneceu a facilidade de mencionar o evento no qual o trigger precisa ser acionado e o momento da execução.

Um trigger é um bloco nomeado PL/SQL (linguagem para desenvolvimento de programas que dentro do servidor de banco de dados Oracle) armazenado no banco de dados Oracle e executado automaticamente quando um evento de trigger ocorre.

No Oracle, você pode definir procedimentos que são implicitamente executados quando uma instrução INSERT, UPDATE ou DELETE é emitida na tabela associada. Esses procedimentos são chamados de triggers de banco de dados.

Existem seis instruções CREATE TRIGGER de acordo com seus pontos de disparo.

CREATE  [OR  REPLACE]  TRIGGER  trigger_name
{BEFORE  |  AFTER  }  triggering_event  ON  table_name
[FOR  EACH  ROW]
[FOLLOWS  |  PRECEDES  another_trigger]
[ENABLE  /  DISABLE  ]
[WHEN  condition]
DECLARE
declaration  statements
BEGIN
executable  statements
EXCEPTION
exception_handling  statements
END;

Se você não incluir as palavras-chave OR REPLACE, receberá uma mensagem de erro indicando que o nome do seu gatilho já foi usado por outro objeto.

Exemplo de Triggers no MySQL

O Trigger no MySQL é um objeto de banco de dados associado a uma tabela. Será ativado quando uma ação definida for executada para a tabela. O trigger pode ser executado quando você executa uma das seguintes instruções do MySQL na tabela: INSERTUPDATE e DELETE e pode ser chamada antes ou depois do evento.

delimiter //
CREATE TRIGGER nome_Trigger
AFTER INSERT ON usuario_voto
FOR EACH ROW
BEGIN
Aqui você coloca a estrutura do trigger.
END //
delimiter ;

Comandos comuns

Para remover um Trigger podemos utilizar o comando: DROP TRIGGER nome_Trigger;

Para visualizar todos os Triggers podemos utilizar o comando: SHOW TRIGGERS;

Aprenda muito mais neste treinamento – CLIQUE AQUI