我需要澄清实用的自主交易。我在触发器中使用了重叠选择查询,并在过程中使用了插入查询。如果我在单个文件中导入两个记录,则第二条记录与第一条记录相同,因此第二条记录应显示为重叠错误。现在,触发器中的select查询已执行,但使用编译指示自主事务不会引发错误。
答案 0 :(得分:2)
AUTONMOUS_TRANSACTION
是一个嵌套事务。它独立于调用事务执行DML。因此,在自主事务中发出的查询不会在外部事务中看到任何未提交的更改。这就是为什么您看不到错误消息的原因:无效状态仅存在于未提交的事务更改中。
很显然,您正在使用AUTONMOUS_TRANSACTION
来避免表格突变。但是,更好的解决方案是使用COMPOUND DML触发器:使用FOR EACH ROW
将更改存储在数组中,然后在AFTER
语句阶段验证它们是否没有重叠。 Find out more。