sql >> Base de Datos >  >> RDS >> Oracle

pragma Autonomous_transaction en un disparador

El uso de una transacción autónoma para cualquier otra cosa que no sea el registro que desea conservar cuando la transacción principal se revierte es casi seguro un error. Este no es un buen uso de una transacción autónoma.

Qué sucede, por ejemplo, si actualizo una fila en t1 pero mi transacción retrocede. El t2 los cambios ya se han realizado y confirmado para que no se reviertan. Eso generalmente significa que el t2 los datos ahora son incorrectos. El objetivo de las transacciones es garantizar que un conjunto de cambios sea atómico y sea completamente exitoso o completamente revertido. Permitir que el código tenga un éxito parcial casi nunca es una buena idea.

Estoy en apuros para ver lo que el uso de una transacción autónoma te compra aquí. A menudo verá personas que usan transacciones autónomas de forma incorrecta para evitar errores de activación de mutación. Pero el código que publicaste no generaría un error de activación de mutación a menos que hubiera una activación de nivel de fila en t2 que también estaba tratando de actualizar t1 o algún mecanismo similar que introducía una tabla mutante. Sin embargo, si ese es el caso, el uso de una transacción autónoma generalmente es aún peor porque la transacción autónoma no puede ver los cambios que se realizan en la transacción principal, lo que casi con certeza hace que el código se comporte de manera diferente a lo que desearía.