terça-feira, 1 de setembro de 2020

Trigger


São blocos de execução nomeados, sua principal diferença em relação as Procedures e Packages, é que não existe "chamada" para Trigger sua execução é iniciada a partir de de uma ação de DML (Insert, Update ou Delete) na tabela a qual ela esta vinculada. O Trigger é disparado toda vez que ocorre uma ação na tabela.

https://docs.oracle.com/cd/B19306_01/server.102/b14220/triggers.htm
Fonte: https://docs.oracle.com/cd/B19306_01/server.102/b14220/triggers.htm


Os Triggers podem ser do tipo:

  • ROW LEVEL (Linha) 
  • STATEMENT (Tabela). 


Podendo ser acionadas  antes (BEFORE) ou depois(AFTER)  da execução da DML  na tabela.

Esse recurso de banco é utilizado principalmente quando existe a necessidade de se manter uma integridade dos dados alem das chaves (PK e FK), e para realizar a auditoria das alterações. Exemplo quando precisa-se manter um histórico de qual usuário realizou alteração e quando em outra tabela do sistema.

Triggers é um recurso poderoso dos SGBDs porem pode causar muita lentidão no sistema se mal aplicado, pois pode aumentar muito o tempo de execução de simples Inserts, Updates ou delete. O mais recomendado é criar a trigger Row Level ( Linha) validando apenas  a coluna e/ou ação.

Dentro das triggers encontramos 2 tipos específicos de variáveis :old e :new que permitem consultar o conteúdo da tabela anterior a ação de DML e posterior ação de DML respectivamente.