[英]Can't add foreign key constraint to table
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);
我正在嘗試添加外鍵約束,但是我不明白為什么會收到此錯誤:
最后一行錯誤:
ORA-00904:“ CREDITSTATUS”:無效的標識符
您正在嘗試為CUSTOMER
表上名為CREDITSTATUS
的外鍵添加外鍵約束。 但是, CUSTOMER
表沒有CREDITSTATUS
的外鍵。
您必須在CUSTOMER
為CREDITSTATUS
創建一個外鍵,然后重新運行最后一行以添加約束。
編輯
使用ALTER TABLE將列添加到CUSTOMER:
ALTER TABLE CUSTOMER ADD CREDITSTATUS VARCHAR(20);
文件: http : //www.techonthenet.com/oracle/tables/alter_table.php
正如我在評論中指出的那樣,您的customer
表沒有creditstatus
列。 您首先必須添加它:
ALTER TABLE customer ADD creditstatus VARCHAR2(20);
然后使用您已有的語句將其設置為外鍵。
您可以在一個語句中添加列和外鍵約束:
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-無論如何,這是您想要的大多數情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.