我以前在我的Oracle交易中执行了SET CONSTRAINTS ALL DEFERRED
,但是只要我从insertRow
上ResultSet
拨打PreparedStatement
,就TYPE_SCROLL_INSENSITIVE
配置为CONCUR_UPDATABLE
和java.sql.SQLIntegrityConstraintViolationException
,我仍然得到ORA-02291
(SET CONSTRAINTS ALL DEFERRED
:违反完整性约束条款。)
这是一个带有“self”外键约束的表(它代表一个图形;具体来说就是一棵树),所以当我稍后插入一行后,实际上应该满足约束。
为什么{{1}}显然被忽略了,我该怎么办呢?
答案 0 :(得分:3)
问题是您的约束不是DEFERRABLE
。您可以使用以下方式进行检查:
SELECT constraint_name, table_name, DEFERRABLE
FROM all_constraints
WHERE owner = 'myschema'
AND table_name = 'THE_TABLE';
如果约束未创建为DEFERRED
,则SET CONSTRAINTS ALL DEFERRED
不会产生任何影响。
解决方案:将约束重新创建为DEFERRED