【问题标题】:02298. 00000 - "cannot validate (%s.%s) - parent keys not found"02298. 00000 - “无法验证 (%s.%s) - 未找到父键”
【发布时间】:2018-12-17 12:35:29
【问题描述】:

第 1 步:

我有脚本来禁用约束和触发。这已成功执行。

第二步:

我有截断表格的脚本。这也执行成功了。

第 3 步:

但是当我尝试启用约束和触发器时,我遇到了错误。

Error report -
ORA-02298: cannot validate (EMPLOYEE.FK_829_EMP_STATUS) - parent keys not found
ORA-06512: at line 6
02298. 00000 - "cannot validate (%s.%s) - parent keys not found"
*Cause:    an alter table validating constraint failed because the table has
           child records.
*Action:   Obvious

【问题讨论】:

  • 您的截断脚本显然至少漏掉了一张表。
  • A minimal reproducible example 包括 DBMS(带版本)、清晰的规范、剪切和粘贴和可运行代码(具有小的代表性输入)(将表初始化格式化为表)和可区分(因此排序)所需的输出.但是调试的绝对基础说:表明你的程序在通过(子)表达式时做了你期望的事情,通过说明它是什么并通过增量输出显示它实际上是这样做的。在添加您无法修复的问题代码时,请研究(手册和网络)。重复,尽量减少工作代码和错误代码。然后询问工作示例和非工作示例之间的(小)差异。

标签: sql oracle foreign-keys ddl


【解决方案1】:

您在 EMPLOYEE 表上启用的约束具有父表中不存在的记录。查看您正在启用的约束,然后删除孤立子项,将记录添加回父项,或使用 NOVALIDATE 子句,以便即使有孤立子项也将启用约束(只要知道您有一些违规行为) "ok'd" 将存在于表中)。

要查找有关约束的信息:

select * 
from dba_constraints 
where constraint_name = 'FK_829_EMP_STATUS'

查找 R_CONSTRAINT_NAME 列,然后:

select * 
from dba_constraints 
where constraint_name = '<r_constraint_name_value_from_above>'

如果需要列,可以查询dba_cons_columns where constraint_name = 'xxxx'

无论哪种方式,这将为您提供所涉及的表和列的图片,以便您可以如我之前所述,修复数据或使用 NOVALIDATE 启用。

-吉姆

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多