当我创建表EMPLOYEE
时,我将ESSN
作为主键,SUPERSSN
使用DNO
作为外键来自同一个表中的外键dep表,当我想插入显示的值时,现在我很困惑。
该表包含以下内容:
Name Null? Type
----------------------------------------- -------- --------------
ENAME NOT NULL VARCHAR2(30)
ESSN NOT NULL CHAR(14)
BDATE DATE
DNO NUMBER(38)
SUPERSSN CHAR(14)
我第一次使用以下命令行:
INSERT INTO EMPLOYEE ('JOSEPH','789456','14-DEC-1986','3','123');
然后我尝试没有DNO
:
SQL> INSERT INTO EMPLOYEE (ENAME,ESSN,BDATE)
2 VALUES('JOSEPH','9861050560','14-DEC-1986');
-------------------------------
INSERT INTO EMPLOYEE (ENAME,ESSN,BDATE)
*
ERROR at line 1:
ORA-02291: integrity constraint (SYSTEM.SYS_C007150) violated - parent key not
found
----------------------------
答案 0 :(得分:1)
父表中最有可能缺少SUPERSSN
(假设)的parent_key记录。你可以通过
SELECT *
FROM user_constraints
WHERE table_name = 'EMPLOYEE'
因此,您需要先在employees表的父表中插入值,然后在子表中插入值。
要找出parent_table,请执行
SELECT uc.constraint_name
|| CHR (10)
|| '('
|| ucc1.TABLE_NAME
|| '.'
|| ucc1.column_name
|| ')'
constraint_source,
'REFERENCES'
|| CHR (10)
|| '('
|| ucc2.TABLE_NAME
|| '.'
|| ucc2.column_name
|| ')'
references_column
FROM user_constraints uc, user_cons_columns ucc1, user_cons_columns ucc2
WHERE uc.constraint_name = ucc1.constraint_name
AND uc.r_constraint_name = ucc2.constraint_name
AND ucc1.POSITION = ucc2.POSITION
AND UC.TABLE_NAME = 'EMPLOYEE'
AND uc.constraint_type = 'R'
有关详细信息,请查看this。
答案 1 :(得分:1)
我认为您输入的新条目(具有外键约束)是指不存在的条目
答案 2 :(得分:0)
这是一个查询,您可以用来检查外键表中的值是否存在,当然如果它们不存在则必须插入它们来解决父键违规:
SELECT E.* FROM EMPLOYEE E
LEFT JOIN SUPER_TABLE S
ON E.SUPERSSN = S.SUPERSSN
WHERE S.SUPERSSN IS NULL AND E.SUPERSSN IS NOT NULL;
当然,假设问题出在SUPERSSN键上。如果您有其他外键,那么您可能还需要检查它们。