Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

pragma autônoma_transaction em um gatilho


Usar uma transação autônoma para qualquer outra coisa que não seja o log que você deseja que seja preservado quando a transação pai é revertida é quase certamente um erro. Este não é um bom uso de uma transação autônoma.

O que acontece, por exemplo, se eu atualizar uma linha em t1 mas minha transação reverte. O t2 as alterações já foram feitas e confirmadas para que não sejam revertidas. Isso geralmente significa que o t2 os dados agora estão incorretos. O ponto principal das transações é garantir que um conjunto de alterações seja atômico e seja completamente bem-sucedido ou completamente revertido. Permitir que o código seja parcialmente bem-sucedido quase nunca é uma boa ideia.

Estou pressionado para ver o que usar uma transação autônoma compra você aqui. Muitas vezes, você verá pessoas usando transações autônomas incorretamente para contornar erros de gatilho mutantes. Mas o código que você postou não geraria um erro de gatilho mutante, a menos que houvesse um gatilho em nível de linha em t2 que também estava tentando atualizar t1 ou algum mecanismo semelhante que estava introduzindo uma tabela mutante. Se for esse o caso, no entanto, usar uma transação autônoma geralmente é ainda pior porque a transação autônoma não pode ver as alterações feitas na transação pai, o que quase certamente faz com que o código se comporte de maneira diferente do que você deseja.