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

pragma_transaction_autonome dans un trigger

L'utilisation d'une transaction autonome pour autre chose que la journalisation que vous souhaitez conserver lorsque la transaction parent est annulée est presque certainement une erreur. Ce n'est pas une bonne utilisation d'une transaction autonome.

Que se passe-t-il, par exemple, si je mets à jour une ligne dans t1 mais ma transaction est annulée. Le t2 des modifications ont déjà été apportées et validées afin qu'elles ne soient pas annulées. Cela signifie généralement que le t2 les données sont maintenant incorrectes. L'intérêt des transactions est de s'assurer qu'un ensemble de modifications est atomique et qu'il est soit complètement réussi, soit complètement annulé. Permettre au code de réussir partiellement n'est presque jamais une bonne idée.

J'ai du mal à voir ce que l'utilisation d'une transaction autonome vous achète ici. Vous verrez souvent des personnes utiliser de manière incorrecte des transactions autonomes pour contourner de manière incorrecte les erreurs de déclenchement de mutation. Mais le code que vous avez posté ne générerait pas d'erreur de déclencheur de mutation à moins qu'il n'y ait un déclencheur au niveau de la ligne sur t2 qui essayait également de mettre à jour t1 ou un mécanisme similaire qui introduisait une table de mutation. Si tel est le cas, cependant, l'utilisation d'une transaction autonome est généralement encore pire, car la transaction autonome ne peut alors pas voir les modifications apportées à la transaction parente, ce qui entraîne presque certainement le code à se comporter différemment de ce que vous souhaiteriez.