ORA-02298未找到父密钥?

时间:2015-02-25 23:54:29

标签: oracle sqlplus

我每次尝试时都会被困在这个问题上 - 它会出现以下错误:无法验证 - 找不到父密钥。

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

http://i.imgur.com/6JBzTiM.jpg

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

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

它不断提出验证错误。

我做错了什么?

2 个答案:

答案 0 :(得分:18)

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

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

您的选择:

找到offending keys by running

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

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

另一种选择是使用NOVALIDATE,以便不检查现有数据,但将验证任何新的插入/更新。有关此问题,请参阅this fiddle了解。

答案 1 :(得分:0)

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

改变表A.   添加约束A_01外键(CODE)引用B(CODE); 我键入:插入B(CODE)值(0); 然后它有效!