从触发器调用Oracle自治存储过程

McA*_*hey 1 oracle triggers stored-procedures

我有一个Oracle触发器,它调用一个定义了PRAGMA AUTONOMOUS_TRANSACTION的存储过程.从触发器传递的值已经提交但似乎存储过程中的值不可用?我不是很肯定,因为调试/记录/提交的能力很难,输出的时间让我感到困惑.我想知道是否预期任何传递的值都可以在存储过程中使用,而不管AUTONOMOUS_TRANSACTION?谢谢

Jus*_*ave 5

作为参数传入存储过程的值始终可用于存储过程.使用自治事务声明过程无关紧要.

在自治事务中运行的代码无法查看调用事务所做的更改.10次​​中有9次,当人们描述看到他们期望的数据的问题时,这就是问题的根源.

如果您的存储过程除了将某些内容写入日志表之外还执行任何操作,我将非常谨慎地使用自治事务.如果您使用自动事务来执行除日志记录之外的任何操作,则几乎肯定会错误地使用它们.而且你可能会引入一系列与竞争条件和交易完整性相关的错误.

  • @McArthey - 使用自治事务来解决变异触发错误几乎总是一个错误.由于SELECT语句无法看到触发语句所做的更改,这意味着您的SELECT应该在before语句触发器中完成(因为您不关心当前语句所做的更改)或者您需要更强大的解决方案. (2认同)