Oracle
 sql >> Database >  >> RDS >> Oracle

pragma transazione_autonoma in un trigger

L'utilizzo di una transazione autonoma per qualcosa di diverso dalla registrazione che si desidera venga preservata quando la transazione padre esegue il rollback è quasi certamente un errore. Questo non è un buon uso di una transazione autonoma.

Cosa succede, ad esempio, se aggiorno una riga in t1 ma la mia transazione torna indietro. Il t2 le modifiche sono già state apportate e salvate in modo che non vengano ripristinate. Ciò generalmente significa che il t2 i dati ora non sono corretti. Lo scopo principale delle transazioni è garantire che una serie di modifiche sia atomica e sia completamente riuscita o completamente ripristinata. Consentire al codice di avere un successo parziale non è quasi mai una buona idea.

Non riesco a vedere cosa ti compri usando una transazione autonoma qui. Vedrai spesso persone che utilizzano in modo errato transazioni autonome per aggirare in modo errato gli errori di attivazione mutanti. Ma il codice che hai pubblicato non genererebbe un errore di trigger mutante a meno che non ci fosse un trigger a livello di riga su t2 che stava anche cercando di aggiornare t1 o qualche meccanismo simile che stava introducendo una tabella mutante. In tal caso, tuttavia, l'utilizzo di una transazione autonoma è generalmente anche peggio perché la transazione autonoma non può vedere le modifiche apportate nella transazione principale, il che quasi certamente fa sì che il codice si comporti in modo diverso da quello che vorresti.