Compound Triggers no Oracle PL/SQL

Os Compound Triggers, introduzidos no Oracle 11g, representam uma evolução significativa na arquitetura de triggers do Oracle Database. Esta funcionalidade avançada permite a consolidação de múltiplos pontos de disparo (firing points) em uma única unidade lógica, oferecendo um controle granular sobre o ciclo de vida das operações DML.

O que são Compound Triggers?

Imagine que você está organizando uma grande festa. Você precisa fazer coisas antes dos convidados chegarem, quando cada convidado chega, quando cada convidado sai e depois que todos foram embora. Um Compound Trigger é como um planejador de festas que pode lidar com todas essas etapas em um único lugar!

No mundo do Oracle PL/SQL, um Compound Trigger permite combinar diferentes tipos de triggers em um só. Isso inclui:

  1. Um trigger que dispara antes da ação principal (como um INSERT ou UPDATE)
  2. Um trigger que dispara antes de afetar cada linha
  3. Um trigger que dispara depois de afetar cada linha
  4. Um trigger que dispara após a ação principal ser concluída

Estrutura de um Compound Trigger

Vamos ver como é a estrutura básica de um Compound Trigger:

Exemplo Prático

Vamos criar um Compound Trigger para a tabela EMPLOYEES (que faz parte do schema HR no Oracle). Este trigger vai:

  1. Verificar se é dia útil antes de permitir alterações
  2. Registrar o usuário que fez a alteração
  3. Contar quantas linhas foram afetadas
  4. Registrar o total de alterações no log

Neste exemplo, criamos um Compound Trigger que:

  1. Verifica se é dia útil antes de permitir qualquer alteração
  2. Registra o usuário que está fazendo a alteração
  3. Atualiza informações de auditoria para cada linha inserida ou atualizada
  4. Conta quantas linhas foram afetadas
  5. Registra um resumo da operação em uma tabela de log

Vantagens dos Compound Triggers

  1. Código mais organizado: Todas as ações relacionadas estão em um único lugar.
  2. Melhor performance: Reduz a sobrecarga de ter múltiplos triggers separados.
  3. Compartilhamento de variáveis: As variáveis declaradas podem ser usadas em todas as seções.
  4. Resolução de problemas de “tabela mutante”: Ajuda a evitar erros comuns em triggers complexos.

Resolvendo o Problema da “Tabela Mutante”

Lembra daquele problema chato de “tabela mutante” que às vezes acontece com triggers normais? Os Compound Triggers podem ajudar a resolver isso!

Vamos ver um exemplo:

Neste exemplo, usamos um Compound Trigger para verificar se um instrutor está sobrecarregado (com mais de 10 seções) sem causar o erro de “tabela mutante”. Fazemos isso armazenando informações na seção BEFORE EACH ROW e fazendo a verificação final na seção AFTER STATEMENT.

Conclusão

Os Compound Triggers são uma ferramenta poderosa no arsenal do desenvolvedor Oracle PL/SQL. Eles permitem criar lógicas complexas de trigger de forma mais organizada e eficiente, além de ajudar a resolver problemas comuns como o da “tabela mutante”.

Lembre-se sempre de usar Compound Triggers com sabedoria. Eles são ótimos para cenários complexos, mas para triggers simples, os triggers tradicionais ainda podem ser a melhor opção.

Pratique bastante e você verá como os Compound Triggers podem tornar seu código mais limpo e eficiente. Boa codificação!

Scroll to Top