PRAGMA AUTONOMOUS_TRANSACTION是什么意思?

时间:2018-11-19 06:33:53

标签: oracle plsql transactions

我需要澄清实用的自主交易。我在触发器中使用了重叠选择查询,并在过程中使用了插入查询。如果我在单个文件中导入两个记录,则第二条记录与第一条记录相同,因此第二条记录应显示为重叠错误。现在,触发器中的select查询已执行,但使用编译指示自主事务不会引发错误。

1 个答案:

答案 0 :(得分:2)

AUTONMOUS_TRANSACTION是一个嵌套事务。它独立于调用事务执行DML。因此,在自主事务中发出的查询不会在外部事务中看到任何未提交的更改。这就是为什么您看不到错误消息的原因:无效状态仅存在于未提交的事务更改中。

很显然,您正在使用AUTONMOUS_TRANSACTION来避免表格突变。但是,更好的解决方案是使用COMPOUND DML触发器:使用FOR EACH ROW将更改存储在数组中,然后在AFTER语句阶段验证它们是否没有重叠。 Find out more