引用Oracle中的复合键

时间:2013-04-29 22:06:33

标签: oracle

我想添加一个引用该列的外键

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:此列列表没有匹配的唯一键或主键

有什么问题?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:-1)

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

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

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

ORA-02270是因为您正在尝试创建外键,并且该键未引用具有唯一约束的主键或列。