Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Pragma autonome_transaktion in einem Trigger

Die Verwendung einer autonomen Transaktion für etwas anderes als die Protokollierung, die Sie beibehalten möchten, wenn die übergeordnete Transaktion zurückgesetzt wird, ist mit ziemlicher Sicherheit ein Fehler. Dies ist keine gute Verwendung einer autonomen Transaktion.

Was passiert zum Beispiel, wenn ich eine Zeile in t1 aktualisiere aber meine Transaktion wird zurückgesetzt. Der t2 Änderungen wurden bereits vorgenommen und festgeschrieben, sodass sie nicht rückgängig gemacht werden können. Das bedeutet im Allgemeinen, dass t2 Daten sind jetzt falsch. Der ganze Zweck von Transaktionen besteht darin, sicherzustellen, dass eine Reihe von Änderungen atomar ist und entweder vollständig erfolgreich ist oder vollständig rückgängig gemacht wird. Zuzulassen, dass Code teilweise erfolgreich ist, ist fast nie eine gute Idee.

Es fällt mir schwer zu sehen, was Sie hier mit einer autonomen Transaktion kaufen können. Sie werden oft sehen, dass Leute autonome Transaktionen fälschlicherweise verwenden, um mutierende Auslöserfehler zu umgehen. Aber der von Ihnen gepostete Code würde keinen mutierenden Triggerfehler generieren, es sei denn, es gab einen Trigger auf Zeilenebene auf t2 das hat auch versucht, t1 zu aktualisieren oder ein ähnlicher Mechanismus, der eine mutierende Tabelle einführte. Wenn dies jedoch der Fall ist, ist die Verwendung einer autonomen Transaktion im Allgemeinen noch schlimmer, da die autonome Transaktion dann die Änderungen nicht sehen kann, die in der übergeordneten Transaktion vorgenommen werden, was mit ziemlicher Sicherheit dazu führt, dass sich der Code anders verhält, als Sie es wünschen.