不能外键约束添加到表

问题描述:

CREATE TABLE CUSTOMER 
(
    CNUM VARCHAR(25) NOT NULL, 
    CNAME VARCHAR(75) NOT NULL, 
    CTYPE VARCHAR(20) NOT NULL, 

    CONSTRAINT CUSTOMER_PK PRIMARY KEY(CNUM), 
    CONSTRAINT CHECK_CTYPE CHECK(CTYPE IN('INDIVIDUAL', 'INSTITUTION')) 
); 

CREATE TABLE CREDIT_TERM 
(
    CREDITSTATUS VARCHAR(20) NOT NULL, 
    STARTDATE DATE NOT NULL, 
    ENDDATE DATE NOT NULL, 

    CONSTRAINT CREDIT_TERM_PK PRIMARY KEY(CREDITSTATUS) 
); 


insert into CREDIT_TERM values('ONE-MONTH','15-05-2015','15-06-2015'); 
insert into CREDIT_TERM values('TWO-MONTH','15-05-2015','15-06-2015'); 
insert into CREDIT_TERM values('THREE-MONTH','15-05-2015','15-06-2015'); 

ALTER TABLE CUSTOMER 
ADD CONSTRAINT CUSTOMER_FK_CREDITSTATUS 
    FOREIGN KEY(CREDITSTATUS) REFERENCES CREDIT_TERM(CREDITSTATUS); 

我想添加一个外键约束,但我不明白为什么我得到这个错误:不能外键约束添加到表

ERROR at last line :
ORA-00904: "CREDITSTATUS": invalid identifier

+5

您的'客户'表没有'creditstatus'列。你究竟想要做什么? – Mureinik

+0

如何添加信用状态列添加使其参考credit_term – user6235245

你要加入CUSTOMER表中名为CREDITSTATUS的外键的外键约束。但是,CUSTOMER表没有CREDITSTATUS的外键。

您必须在CUSTOMER中为CREDITSTATUS创建外键,然后重新运行最后一行以添加约束。

编辑

使用ALTER TABLE将该列添加到客户:

ALTER TABLE CUSTOMER ADD CREDITSTATUS VARCHAR(20); 

文档: http://www.techonthenet.com/oracle/tables/alter_table.php

+0

我该怎么做? – user6235245

+0

好的,如果我们可以说我想为客户表中记录的信用状态添加一个值,那么我该怎么做? – user6235245

+0

@ user6235245 - 带有UPDATE语句 – APC

正如我在评论中指出,您的customer表没有一个creditstatus列。你首先需要添加它:

ALTER TABLE customer ADD creditstatus VARCHAR2(20); 

然后使它成为一个外键,你已经拥有了声明。

+0

好吧,如果让我说我想为客户表中记录的信用状态添加一个值,我该如何做? – user6235245

您可以在一个声明中添加列和外键约束:

alter table customer add (
    creditstatus varchar2(20) constraint customer_fk_creditstatus references credit_term 
    ); 

的几个注意事项。首先,我将列定义放在括号中。它可能没有它们,但官方语法似乎需要它们。 http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_3001.htm#i2103924

其次,在一个内联约束中(在列级定义,而不是在表级),您不能使用单词FOREIGN KEY。单词REFERENCES已经标识了约束类型。第三,如果您引用被引用表的PRIMARY KEY,则不需要(但您可以根据需要)命名引用表中的引用列。如果你没有命名该列,被引用表的PRIMARY KEY将被默认使用 - 无论如何,这在绝大多数情况下都是你想要的。