Exécution de déclencheurs d’événements de base de données et traitement des exceptions
Les déclencheurs sur les événements CONNECT
et DISCONNECT
sont exécutés dans une transaction spécialement créée à cet effet.Si aucune exception n’est levée lors du traitement du déclencheur, la transaction est acquittée.Les exceptions non vérifiées annuleront la transaction et :
-
dans le cas d’un déclencheur d’événement CONNECT
, la connexion est rompue et des exceptions sont renvoyées au client ;
-
Pour un événement déclencheur DISCONNECT
, la connexion est terminée comme prévu, mais les exceptions ne sont pas renvoyées au client.
Les déclencheurs d’événements CONNECT
et DISCONNECT
sont également déclenchés lorsque l’instruction de réinitialisation de l’environnement de session est exécutée.Voir la section ALTER SESSION RESET pour les particularités de la gestion des erreurs dans les déclencheurs des événements CONNECT
et DISCONNECT
.
Les déclencheurs sur les événements de transaction sont déclenchés au début de la transaction, à sa confirmation ou à son retour.Les exceptions non vérifiées sont traitées en fonction du type d’événement :
-
pour l’événement TRANSACTION START
, l’exception est renvoyée au client et la transaction est annulée ;
-
pour l’événement TRANSACTION COMMIT
, l’exception est retournée au client, l’action effectuée par le déclencheur et la transaction sont annulées ;
-
Pour l’événement TRANSACTION ROLLBACK
, l’exception n’est pas renvoyée au client et la transaction est annulée comme prévu.
Pièges
Il résulte de ce qui précède qu’il n’y a pas de moyen direct de savoir quel déclencheur (DISCONNECT
ou ROLLBACK
) a soulevé l’exception.Il est également clair que vous ne pouvez pas vous connecter à la base de données lorsqu’il y a une exception dans le déclencheur d’événements CONNECT
, et le démarrage d’une transaction est également annulé lorsqu’il y a une exception dans le déclencheur d’événements TRANSACTION START
.Dans les deux cas, la base de données est effectivement verrouillée jusqu’à ce que vous désactiviez les déclencheurs de la base de données et corrigiez le code erroné.