2010-11-04 17 views

Répondre

27

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

  1. Vous pouvez utiliser une vue matérialisée avec ON COMMIT REFRESH et ajouter des déclencheurs à cette MV. Cela vous permet de déclencher la logique lorsqu'une table de base a été modifiée au moment de la validation. Si le déclencheur déclenche 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. Ce serait une action asynchrone et peut être souhaitable dans certains cas (par exemple quand vous voulez envoyer un email après que la transaction a réussi). Si vous annulez la transaction principale, le travail sera annulé. Le travail et la session principale sont indépendants: si le travail é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 triggers car cela ajoute beaucoup de complexité mais techniquement je pense que ce serait faisable.

+0

Merci. L'option # 1 est pratique pour mon cas. –

0

J'ai eu un problème similaire, mais l'option 1 n'était malheureusement pas pratique pour mon cas.

Une autre solution possible, suggérée par "Ask Tom", est de spécifier une procédure stockée et d'appeler simplement cette procédure avant d'exécuter COMMIT. Cette solution est seulement pratique si vous avez accès au code qui exécute COMMIT, mais pour moi, c'était la solution la plus simple.