2013-04-29 23 views
-4

我想补充这本身引用复合键在甲骨文

FOREIGN KEY ACCREDITATION_BODY_ID NOT NULL REFERENCES 
ACCREDITATION_BODY_LOOK_UP(ACCREDITATION_BODY_ID), 

,并在表中的SQL引用该列的外键是:

CREATE TABLE "COURSE_ACCREDITED" 
     ("COURSE_ID" VARCHAR2(50) NOT NULL ENABLE, 
"ACCREDITATION_BODY_ID" VARCHAR2(50) NOT NULL ENABLE, 
"DATE_OBTAINED" VARCHAR2(50), 
PRIMARY KEY ("COURSE_ID", "ACCREDITATION_BODY_ID", "DATE_OBTAINED") ENABLE) 

当我加入这个外键,它会出现ORA-02270:此列名称没有匹配的唯一或主键

问题是什么?

+0

发布'accreditation_body_look_up'表的定义。该错误表明'accreditation_body_id'不是该表的主键。 – 2013-04-29 22:12:46

+0

您是否阅读过错误信息?外键需要引用被引用表中的唯一键或主键 - 可以是同一个表。 – 2013-04-30 09:16:00

+0

你的问题标题和介绍不要你的SQL。您显然添加引用不同表的单列外键。所以你应该停止浪费每个人的时间,并解释你实际上想要做的事情。 – APC 2013-04-30 10:37:14

回答

-1

这意味着子表具有在父表中找不到的值。

您只需要删除这些孤儿值或使用“novalidate”定义外键,这会跳过检查子表和父表之间的完整性。

更正:此地址的不同PK/FK错误

ORA-02270是因为你想创建一个外键和键引用不具有唯一约束主键或列。

+0

它没有。这意味着它不能创建外键,因为“这个列表没有匹配的唯一键或主键”。 – 2013-04-30 09:14:08

+0

我一定很忙。我添加了一个更正。谢谢。 – 2013-05-01 05:51:33

0

ACCREDITATION_BODY_LOOK_UP是否有主键(或唯一键)?

select constraint_name, constraint_type 
from user_constraints 
where table_name = 'ACCREDITATION_BODY_LOOK_UP' 
and constraint_type in ('P', 'U'); 

如果是,它的列是什么?将外键添加到从属表时,您需要按相同顺序引用所有这些列。

select column_name, position 
from user_cons_columns 
where table_name = 'ACCREDITATION_BODY_LOOK_UP' 
and constraint_name = '<< constraint from previous query >>'; 

如果否,那么您需要在该表上创建一个主键,然后才能在外键中引用它。

alter table ACCREDITATION_BODY_LOOK_UP 
    add constraint ACCR_BODY_LKUP_PK primary key (ACCREDITATION_BODY_ID);