簡體   English   中英

無法將外鍵約束添加到表

[英]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的外鍵。

您必須在CUSTOMERCREDITSTATUS創建一個外鍵,然后重新運行最后一行以添加約束。

編輯

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM