首页 文章

引用Oracle中的复合键

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

问题是什么?

2 回答

  • 0

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

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

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

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

  • -1

    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);
    

相关问题