Se forem executados comandos SQL na função de gatilho, e estes comandos acessarem a tabela para a qual o gatilho foi disparado, então é necessário estar ciente das regras de visibilidade de dados, porque elas determinam se estes comandos SQL vão ver as alterações nos dados para os quais o gatilho foi disparado. Em resumo:
Gatilhos no nível de instrução seguem regras simples de
visibilidade: nenhuma das alterações feitas por uma instrução
é visível aos gatilhos BEFORE no nível de
instrução, enquanto todas as alterações são visíveis aos
gatilhos AFTER no nível de instrução.
A alteração dos dados (inserção, atualização, ou exclusão) que
provocou o disparo do gatilho é naturalmente não
visível aos comandos SQL executados em
gatilhos BEFORE no nível de linha, porque
ainda não aconteceu.
Entretanto, os comandos SQL executados no
nível de linha em gatilhos BEFORE
vão ver os efeitos das alterações nos dados
para as linhas previamente processadas no mesmo comando externo.
Isto requer cautela, uma vez que a ordem desses eventos de
alteração não é, em geral, previsível; um comando
SQL que afeta várias linhas pode processar
as linhas em qualquer ordem.
Da mesma forma, um gatilho INSTEAD OF no
nível de linha verá os efeitos das alterações nos dados
feitas por disparos anteriores de gatilhos
INSTEAD OF no mesmo comando externo.
Quando é disparado um gatilho AFTER no
nível de linha, todas as alterações nos dados feitas pelo
comando externo já estão concluídas, estando visíveis pela
função de gatilho chamada.
Se a função de gatilho for escrita em qualquer uma das linguagens
procedurais padrão, as instruções acima se aplicarão somente se a
função for declarada como VOLATILE.
As funções declaradas como STABLE ou
IMMUTABLE não vão ver as alterações feitas
pelo comando que as chamou em nenhum caso.
Mais informações sobre as regras de visibilidade de dados podem ser encontradas em Visibilidade das alterações dos dados. Um exemplo completo de gatilho inclui demonstração dessas regras.