Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment définir un trigger ON COMMIT dans Oracle ?

Il n'y a pas de mécanisme de déclenchement ON COMMIT dans Oracle. Il existe cependant des solutions :

  1. Vous pouvez utiliser une vue matérialisée avec ON COMMIT REFRESH et ajouter des déclencheurs à ce MV. Cela vous permettrait de déclencher la logique lorsqu'une table de base a été modifiée au moment de la validation . Si le déclencheur génère une erreur, la transaction sera annulée (vous perdrez toutes les modifications non validées).

  2. Vous pouvez utiliser DBMS_JOB pour différer une action après la validation. Il s'agirait d'une action asynchrone et peut être souhaitable dans certains cas (par exemple, lorsque vous souhaitez envoyer un e-mail une fois la transaction réussie). Si vous annulez la transaction principale, la tâche sera annulée. La tâche et la session principale sont indépendantes :si la tâche échoue, la transaction principale ne sera pas annulée.

Dans votre cas, vous pourriez probablement utiliser l'option (1). Personnellement, je n'aime pas coder la logique métier dans les déclencheurs car cela ajoute beaucoup de complexité, mais techniquement, je pense que ce serait faisable.