我们在批处理作业中收到 ORA-00001(违反唯一约束)。但是,错误发生在发出 COMMIT 时,而不是在插入有问题的记录时。
问题:
- 为什么在 COMMIT 会检查唯一约束?(我们可以使用一些设置以便在插入时进行检查吗?)
- 我们如何找出导致违反唯一约束的违规 SQL/记录?
任何帮助表示赞赏!
附加信息/问题:
“违规”约束标记为 IMMEDIATE 和 NON-DEFERRABLE。这可以在事务中覆盖吗?
我们在批处理作业中收到 ORA-00001(违反唯一约束)。但是,错误发生在发出 COMMIT 时,而不是在插入有问题的记录时。
问题:
任何帮助表示赞赏!
附加信息/问题:
“违规”约束标记为 IMMEDIATE 和 NON-DEFERRABLE。这可以在事务中覆盖吗?
可以将约束标记/定义为可延迟的。在这种情况下,约束检查可以是“立即的”或“延迟的”。定义约束时,您可以设置默认/初始值,initially immediate
或initially deferred
. 当设置为deferred
约束时,直到您提交事务才会强制执行。
您可以更改可延迟约束的行为,例如通过
set constraints all immediate;
另见:http ://www.oracle.com/technology/oramag/oracle/03-nov/o63asktom.html
可以将约束定义为延迟,这意味着它们在提交时检查,而不是在数据更改时检查。请参阅以下 2 个链接:
http://www.oracle-base.com/articles/8i/ConstraintCheckingUpdates.php
http://www.oracle.com/technology/oramag/oracle/03-nov/o63asktom.html
希望能帮助到你