sql >> Database >  >> RDS >> Oracle

pragma autonome_transactie in een trigger

Het gebruik van een autonome transactie voor iets anders dan logboekregistratie dat u wilt behouden wanneer de bovenliggende transactie wordt teruggedraaid, is vrijwel zeker een fout. Dit is geen goed gebruik van een autonome transactie.

Wat gebeurt er bijvoorbeeld als ik een rij bijwerk in t1 maar mijn transactie wordt teruggedraaid. De t2 er zijn al wijzigingen aangebracht en vastgelegd, zodat ze niet worden teruggedraaid. Dat betekent over het algemeen dat de t2 gegevens zijn nu onjuist. Het hele punt van transacties is om ervoor te zorgen dat een reeks wijzigingen atomair is en ofwel volledig succesvol is of volledig wordt teruggedraaid. Toestaan ​​dat code gedeeltelijk succesvol is, is bijna nooit een goed idee.

Ik vind het moeilijk om te zien wat het gebruik van een autonome transactie u hier oplevert. Je zult vaak zien dat mensen op een verkeerde manier autonome transacties gebruiken om het muteren van triggerfouten op een onjuiste manier te omzeilen. Maar de code die je hebt gepost, zou geen muterende trigger-fout genereren, tenzij er een trigger op rijniveau was op t2 die ook probeerde t1 . bij te werken of een soortgelijk mechanisme dat een muterende tabel introduceerde. Als dat het geval is, is het gebruik van een autonome transactie over het algemeen nog erger, omdat de autonome transactie dan de wijzigingen in de bovenliggende transactie niet kan zien, waardoor de code zich vrijwel zeker anders gedraagt ​​dan u zou willen.




  1. SQL CREATE TABLE … AS SELECT-instructie

  2. Het minimaliseren van de impact van het verbreden van een IDENTITEIT-kolom - deel 2

  3. geen groepsfunctie met één groep met MAX in select

  4. MySQL Selecteer datumbereiken tussen gegevensreeksen gescheiden met NULL