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 未找到父键?的主要内容,如果未能解决你的问题,请参考以下文章
SQL ORA-02291: 违反完整性约束 - 未找到父键