ORA-02298 未找到父键?

Posted

技术标签:

【中文标题】ORA-02298 未找到父键?【英文标题】:ORA-02298 Parent Keys Not Found? 【发布时间】:2015-02-25 23:54:28 【问题描述】:

每次我尝试它时,我都被这个问题困扰了很久 - 它出现以下错误:无法验证 - 找不到父键。

这是代码 (http://i.imgur.com/6JBzTiM.jpg):

我可以在Employees 表中创建主键并将其分配给EmployeeId。但是当尝试将它作为外键添加到 WorkPackages 表中时(使用下面的代码)

ALTER TABLE WORKPACKAGES
ADD FOREIGN KEY (EMPLOYEEID) REFERENCES EMPLOYEES (EMPLOYEEID);

它不断出现验证错误。

我做错了什么?

【问题讨论】:

这可能意味着您的子表中有一个或多个 EMPLOYEEID 的行在父表中找不到。尝试更新子行,或添加父行并再次创建外键。 【参考方案1】:
ALTER TABLE WORKPACKAGES
ADD FOREIGN KEY (EMPLOYEEID) REFERENCES EMPLOYEES (EMPLOYEEID);

强制执行此键时,Oracle 会检查 Workpackages 表中存在的所有 employeeid 是否存在于Employees 表中。

您的选择:

找到offending keys by running

SELECT employeeid
FROM   workpackages
WHERE  employeeid NOT IN (SELECT employeeid
                          FROM   employees); 

然后将它们插入到员工表中。

另一种选择是使用NOVALIDATE,这样就不会检查现有数据,但会验证任何新的插入/更新。有关此的演示,请参阅 this fiddle。

【讨论】:

/非常感谢。但是,我必须先插入所有数据,然后再添加外键,因为如果我先添加外键,然后再添加数据,它只会出现验证错误。【参考方案2】:

同样的问题在我尝试添加约束外键的时候让我很困惑。现在我已经做到了。我在父表中键入了一些值。例如:

更改表 A 添加约束A_01外键(CODE)引用B(CODE); 我键入 :insert into B(CODE) values(0); 然后就可以了!

【讨论】:

以上是关于ORA-02298 未找到父键?的主要内容,如果未能解决你的问题,请参考以下文章

ORA-02298 定位问题

SQL ORA-02291: 违反完整性约束 - 未找到父键

ORA-02291: 违反完整性约束 (PRUEBA4.AUTO_MARCA_FK) - 未找到父键

违反 - 未找到父键错误

我反复收到此“违反完整性约束 - 未找到父键”错误

SQL JDBC:未找到父键,但父值已插入数据库