我正在尝试从查询日志中查找偶尔出现的错误:
SQLSTATE [HY000]:一般错误:1 OCIStmtExecute:ORA-00001:违反唯一约束(FOO.BAR)
当应用程序尝试在事务中执行以下查询时,似乎会发生这种情况:
SET CONSTRAINT foo.bar DEFERRED
有问题的约束是使用以下 DDL 创建的:
ALTER TABLE baz
ADD CONSTRAINT bar
UNIQUE (quux, duux)
DEFERRABLE
INITIALLY IMMEDIATE
USING INDEX
TABLESPACE tuux
本质上,运行此查询的代码执行以下操作:
- 开始交易
- 推迟约束
- 进行必要的更新
- 取消延迟约束
- 提交更新
我的问题是:上面的查询怎么SET CONSTRAINT
可能导致违反唯一约束?我确信这是有问题的查询,因为我有异常的堆栈跟踪。