2016-05-15 102 views
0
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

回答

0

你要加入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

0

正如我在評論中指出,您的customer表沒有一個creditstatus列。你首先需要添加它:

ALTER TABLE customer ADD creditstatus VARCHAR2(20); 

然後使它成爲一個外鍵,你已經擁有了聲明。

+0

好吧,如果讓我說我想爲客戶表中記錄的信用狀態添加一個值,我該如何做? – user6235245

0

您可以在一個聲明中添加列和外鍵約束:

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將被默認使用 - 無論如何,這在絕大多數情況下都是你想要的。