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

Comment appeler une procédure qui utilise la même table après le déclencheur

Vous ne pouvez pas.

Un déclencheur de niveau ligne normal ne peut pas interroger la table sur laquelle le déclencheur est défini, car cela déclencherait une exception de table en mutation. Je suppose que c'est pourquoi vous avez déclaré que votre déclencheur utilise une transaction autonome (une transaction autonome pour autre chose que la journalisation persistante est presque certainement une erreur). Si vous faites cela, cependant, votre déclencheur ne peut pas voir les modifications non validées apportées par la transaction de déclenchement. C'est le problème que vous rencontrez actuellement.

Une alternative serait d'utiliser un déclencheur composé . Vous déclareriez une collection de test_table.type_%type , vous ajouteriez les valeurs qui changent à cette collection dans la partie au niveau de la ligne de votre déclencheur, puis vous itéreriez sur les éléments de la collection dans la partie post-instruction de votre déclencheur. Un déclencheur au niveau de l'instruction est autorisé à interroger la table sur laquelle le déclencheur est défini afin que vous puissiez appeler votre procédure à partir de la partie post-instruction de votre déclencheur composé.