【发布时间】:2018-11-19 06:33:52
【问题描述】:
我需要对 pragma 自治事务有一个清晰的认识。我在触发器中使用了重叠选择查询并在过程中使用了插入查询。如果我在单个文件中导入两条记录,则第二条记录与第一条记录相同,因此第二条记录应显示为重叠错误。现在trigger中的select查询执行了,但是使用pragma自治事务没有抛出错误。
【问题讨论】:
标签: oracle plsql transactions
我需要对 pragma 自治事务有一个清晰的认识。我在触发器中使用了重叠选择查询并在过程中使用了插入查询。如果我在单个文件中导入两条记录,则第二条记录与第一条记录相同,因此第二条记录应显示为重叠错误。现在trigger中的select查询执行了,但是使用pragma自治事务没有抛出错误。
【问题讨论】:
标签: oracle plsql transactions
AUTONMOUS_TRANSACTION 是一个嵌套事务。它独立于调用事务执行 DML。因此,在自治事务中发出的查询不会在外部事务中看到任何未提交的更改。这就是您看不到错误消息的原因:无效状态仅存在于事务未提交的更改中。
显然您正在使用AUTONMOUS_TRANSACTION 来避免变异表错误。但是,更好的解决方案是使用 COMPOUND DML 触发器:使用 FOR EACH ROW 将更改存储在数组中,然后在 AFTER 语句阶段验证它们是否没有重叠。 Find out more。
【讨论】: