Como criar um gatilho SQL

Você cria um disparador SQL, logicamente, com um CREATE TRIGGER

declaração. Após o gatilho é criado, ele se encontra na espera - esperando que o fato gerador ocorrer. Quando o fato gerador ocorre, bang! Os incêndios gatilho.

A sintaxe para a CREATE TRIGGER declaração é bastante envolvido, mas você pode dividi-la em pedaços compreensíveis. Primeiro dê uma olhada no quadro geral:

CREATE TRIGGER trigger_nametrigger_action_timetrigger_eventON table_name [REFERENCING old_or_new_value_alias_list] triggered_action

O nome do gatilho é o identificador exclusivo para esse gatilho. O tempo de ação do gatilho é o tempo que você deseja que a ação do gatilho para ocorrer: ou ANTES ou DEPOIS DE do fato gerador. O fato de que uma ação desencadeada pode ocorrer antes o caso em que é supostamente fazendo-a acontecer pode parecer um pouco estranho, mas em alguns casos, esta capacidade pode ser muito útil.

Porque o mecanismo de banco sabe que está prestes a executar um evento de disparo antes que ele realmente executa-lo, ele tem a capacidade de sanduíche no evento disparado à frente da realização do evento desencadeante, se um tempo de desencadeamento de ANTES foi especificado.

Três possíveis eventos de disparo podem causar um gatilho ao fogo: a execução de um INSERIR declaração, a EXCLUIR declaração, ou um ATUALIZAR declaração. Essas três afirmações têm o poder de alterar o conteúdo de uma tabela de banco de dados.

Assim, qualquer inserção de uma ou mais linhas de valores na tabela do sujeito, qualquer supressão de uma ou mais linhas da tabela sujeito, ou qualquer actualização de uma ou mais colunas, em uma ou mais linhas da tabela o sujeito pode causar um gatilho ao fogo. ON table_name, é claro, refere-se a tabela para a qual um INSERIR, EXCLUIR, ou ATUALIZAR foi especificado.

gatilhos de instrução e de linha

o triggered_action no exemplo anterior tem a seguinte sintaxe:

[FOR EACH ROW] QUANDO 

Você pode especificar como o gatilho vai agir:

  • gatilho de linha: O gatilho será acionado uma vez em cima de encontrar o INSERIR, EXCLUIR, ou ATUALIZAR declaração que constitui o fato gerador.

  • gatilho de instrução: O gatilho será acionado várias vezes, uma vez para cada linha na tabela de assunto que é afetada pelo evento de gatilho.

Tal como indicado pelos parênteses rectos, o PARA CADA cláusula é opcional. Apesar disso, o gatilho deve agir de uma maneira ou de outra. Se não PARA CADA cláusula for especificado, o comportamento padrão é PARA CADA DECLARAÇÃO.

Quando um gatilho incêndios

A condição de pesquisa na QUANDO cláusula permite especificar as circunstâncias em que um gatilho será acionado. Especifique um predicado, e se o predicado é verdade, o gatilho irá fogo se é falsa, ele não vai. Esse recurso aumenta significativamente a utilidade dos gatilhos.

Você pode especificar que um gatilho acionado somente após um determinado valor limite foi excedido, ou quando qualquer outra condição pode ser determinado para ser True ou False.

A instrução SQL acionada

A instrução SQL acionada pode ser uma única instrução SQL ou uma sequência de instruções SQL executadas uma após a outra. No caso de uma única instrução SQL, a instrução SQL disparada é apenas uma instrução SQL comum.

Para uma seqüência de instruções SQL, no entanto, você deve garantir atomicidade para garantir que a operação não é abortado no meio do caminho, deixando o banco de dados em um estado indesejado. Você pode fazer isso com um BEGIN-END bloco que inclui a ATOMIC palavra-chave:

BEGIN ATOMIC {instrução SQL 1} {instrução SQL 2} ... {instrução SQL n }FIM

Um exemplo de definição de gatilho

Suponha que o gerente de recursos humanos das empresas quer ser informado sempre que um dos gerentes regionais contrata um novo empregado. A seguir gatilho pode lidar com essa situação muito bem:

CREATE TRIGGER newhireBEFORE INSERT ON employeeFOR CADA sendmail STATEMENTBEGIN ATOMICCALL ( 'HRDirector') INSERT INTO logtableVALUES ( 'newhire', CURRENT_USER, CURRENT_TIMESTAMP) -END-

Sempre que uma nova linha é inserida na tabela de newhire, um e-mail está disparou para o gerente de RH com os detalhes, e o nome de logon da pessoa que efectua a inserção e o tempo da inserção são registrados em uma tabela de log, proporcionando uma trilha de auditoria.

menu