Oracle JDBC在CONCUR_UPDATABLE ResultSet中忽略SET CONSTRAINTS ALL DEFERRED

时间:2013-10-04 10:38:23

标签: sql oracle jdbc foreign-keys

我以前在我的Oracle交易中执行了SET CONSTRAINTS ALL DEFERRED,但是只要我从insertRowResultSet拨打PreparedStatement,就TYPE_SCROLL_INSENSITIVE配置为CONCUR_UPDATABLEjava.sql.SQLIntegrityConstraintViolationException,我仍然得到ORA-02291SET CONSTRAINTS ALL DEFERRED:违反完整性约束条款。)

这是一个带有“self”外键约束的表(它代表一个图形;具体来说就是一棵树),所以当我稍后插入一行后,实际上应该满足约束。

为什么{{1}}显然被忽略了,我该怎么办呢?

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