2009-06-15 116 views
0

自动禁用当我准备将数据插入到约束被自动禁止用于我所添加的约束(外键)子表参照完整性约束是Oracle

u能请帮我..........

+0

您需要澄清事件的流程。你添加什么样的约束?它什么时候禁用?您插入的行是否与约束一致?等 – GWLlosa 2009-06-15 12:34:24

+0

最初我为子表定义外键...并检查其状态启用。当试图将记录插入该表中时,约束的状态被禁用。 – kishore 2009-06-15 13:25:32

+0

约束的邮政编码和样本插入数据 – jle 2009-06-15 13:26:25

回答

1

约束不能“自动”禁用 - 检查它的当前状态,通过发出这条SQL(如表/约束所有者):

选择状态,从USER_CONSTRAINTS其中constraint_name命令=“theNameOfYourConstraint

这可能是它前已经向您的操作无效的情况下验证。它将保持在该状态,直到明确启用。

[其他]

我从后面评论现在看到的是,禁用似乎是由于使用SQL * Loader的直接路径负载。如果你想防止这种情况发生,我认为你唯一的选择是使用常规负载并处理异常情况。将文件绑定到外部表定义将允许您使用更为程序化的方法,因为您可以像处理Oracle表一样处理该文件。

从Oracle文档:依赖于其他行或表,如参照约束

完整性约束,是直接路径加载之前禁用,必须在之后重新启用。

0

您将不得不向我们提供更多信息/代码。 描述你的约束。 你如何插入记录?

  • 插入语句
  • 调用过程
  • SQL装载机

重现您的问题:

select * 
from user_constraints 
where constraint_name = 'theNameOfYourConstraint'; 

do your insert here 

select * 
from user_constraints 
where constraint_name = 'theNameOfYourConstraint'; 

,并显示我们的输出。

1

从Utilities手册中,直接路径加载会自动禁用关系完整性和检查约束。传统路径不应该有这个问题。

有一个REENABLE子句在直接路径加载结束时启用约束。