参照完整性约束在oracle中自动禁用

时间:2009-06-15 12:28:43

标签: database oracle

何时将数据插入到已添加约束(外键)的子表中

约束自动禁用。

你能帮助我..........

3 个答案:

答案 0 :(得分:1)

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

选择状态,通过user_constraints验证,其中constraint_name =' theNameOfYourConstraint '

可能是在您的操作之前已被禁用的情况。在明确启用之前,它将保持该状态。

<强> [附加]

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

来自Oracle文档:

依赖于其他行或表的完整性约束(例如引用约束)在直接路径加载之前被禁用,并且必须在之后重新启用。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

  • 插入声明
  • 调用程序
  • sql loader

重现您的问题:

select *
from user_constraints 
where constraint_name = 'theNameOfYourConstraint';

do your insert here

select *
from user_constraints 
where constraint_name = 'theNameOfYourConstraint';

并向我们显示输出。