Si vous exécutez des commandes SQL dans votre fonction SQL et que ces commandes accèdent à la table pour laquelle vous créez ce trigger, alors vous avez besoin de connaître les règles de visibilité des données car elles déterminent si les commandes SQL voient les modifications de données pour lesquelles est exécuté le trigger. En bref :
Les triggers niveau instruction suivent des règles de visibilité
simples : aucune des modifications réalisées par une instruction
n'est visible aux triggers niveau instruction appelés avant
l'instruction alors que toutes les modifications sont visibles aux
triggers AFTER
niveau instruction.
Les modifications de données (insertion, mise à jour ou suppression)
lançant le trigger ne sont naturellement pas
visibles aux commandes SQL exécutées dans un trigger BEFORE
en mode
ligne parce qu'elles ne sont pas encore survenues.
Néanmoins, les commandes SQL exécutées par un trigger BEFORE
en mode
ligne verront les effets des modifications de données
pour les lignes précédemment traitées dans la même commande externe. Ceci
requiert une grande attention car l'ordre des événements de modification
n'est en général pas prévisible ; une commande SQL affectant
plusieurs lignes pourrait visiter les lignes dans n'importe quel ordre.
De façon similaire, un trigger niveau ligne de type INSTEAD
OF
verra les effets des modifications de données réalisées
par l'exécution des autres triggers INSTEAD
OF
dans la même commande.
Quand un trigger AFTER
en mode ligne est exécuté, toutes les
modifications de données réalisées par la commande externe sont déjà
terminées et sont visibles par la fonction appelée par le trigger.
Si votre fonction trigger est écrite dans un des langages de procédures
standard, alors les instructions ci-desus s'appliquent seulement si la
fonction est déclarée VOLATILE
. Les fonctions déclarées
STABLE
ou IMMUTABLE
ne verront pas
les modifications réalisées par la commande appelante dans tous les cas.
Il existe plus d'informations sur les règles de visibilité des données dans la Section 45.5. L'exemple dans la Section 37.4 contient une démonstration de ces règles.