Sobre Triggers
Um trigger é uma unidade PL/SQL que é armazenada no banco de dados e (se estiver no estado ativado) executa automaticamente ("dispara") em resposta a um evento especificado.
Um acionador tem a seguinte estrutura:
TRIGGER trigger_name
triggering_event
[ trigger_restriction ]
BEGIN
triggered_action;
END;
O trigger_name deve ser exclusivo para triggers no esquema. Um trigger pode ter o mesmo nome de outro tipo de objeto no esquema (por exemplo, uma tabela); no entanto, a Oracle recomenda o uso de uma convenção de nomenclatura que evite confusão.
Se o trigger estiver no estado ativado, o triggering_event fará com que o banco de dados execute a trigger_action se a trigger_restriction for TRUE ou omitida. O triggering_event está associado a uma tabela, uma view, um esquema ou ao banco de dados, e é um dos seguintes:
-
Instrução DML (descrita em "Sobre Instruções de DML (Data Manipulation Language)")
-
Instrução DDL (descrita em "Sobre Instruções de DDL (Data Definition Language)")
-
Operação do banco de dados (SERVERERROR, LOGON, LOGOFF, STARTUP ou SHUTDOWN)
Se o trigger estiver no estado disabled, o triggering_event não faz com que o banco de dados execute a trigger_action, mesmo que a trigger_restriction seja TRUE ou omitida.
Por padrão, um trigger é criado no estado ativado. É possível desativar um trigger desativado e ativar um trigger desativado.
Ao contrário de um subprograma, um trigger não pode ser chamado diretamente. Um trigger é chamado somente por seu evento de trigger, que pode ser causado por qualquer usuário ou aplicação. Um trigger pode estar em execução sem que você esteja ciente, a menos que ele cause um erro que não seja tratado apropriadamente.
Um gatilho simples pode ser acionado exatamente em um desses pontos de cronometragem:
-
Antes da execução do evento de acionamento (statement-level BEFORE trigger)
-
Depois que o evento de acionamento for executado (trigger AFTER no nível da instrução)
-
Antes de cada linha que o evento afeta (trigger de nível de linha ANTES)
-
Após cada linha que o evento afeta (trigger de nível de linha APÓS)
Um gatilho composto pode ser acionado em vários pontos de tempo. Para obter informações sobre acionadores compostos, consulte Referência de Linguagem do Oracle Database PL/SQL.
Um gatilho INSTEAD OF é definido em uma view e seu evento acionador é uma instrução DML. Em vez de executar a instrução DML, o Oracle Database executa o trigger INSTEAD OF. Para obter mais informações, consulte "Criando um Acionador INSTEAD OF".
Um acionador do sistema é definido em um esquema ou no banco de dados. Um trigger definido em um esquema é acionado para cada evento associado ao proprietário do esquema (o usuário atual). Um trigger definido em um banco de dados é acionado para cada evento associado a todos os usuários.
Uma utilidade dos triggers é a aplicação de regras de negócios que se aplicam a todas as aplicações clientes. Por exemplo, suponha que dados adicionados à tabela EMPLOYEES devam ter um determinado formato e que muitos aplicativos cliente possam adicionar dados a essa tabela. Um trigger na tabela pode garantir o formato apropriado de todos os dados adicionados a ela. Como o trigger é executado toda vez que um cliente adiciona dados à tabela, nenhum cliente poderá ignorar as regras, e o código que força as regras pode ser armazenado e mantido somente no trigger, e não em todas as aplicações cientes. Para outros usos dos triggers, consulte Referência de Linguagem PL/SQL do Oracle Database.
Consulte Também: Referência de Linguagem PL/SQL do Oracle Database para informações completas sobre triggers