2016-05-12 125 views
0
SQL> CREATE TABLE CUSTOMER(
2 CNUM VARCHAR(25) NOT NULL, 
3 CNAME VARCHAR(75) NOT NULL, 
4 CTYPE VARCHAR(20) NOT NULL, 
5 PRIMARY KEY(CNUM), 
6 CONSTRAINT CHECK (CTYPE IN('INDIVIDUAL', 'INSTITUTION')); 
CONSTRAINT CHECK (CTYPE IN('INDIVIDUAL', 'INSTITUTION')) 
                * 
ERROR at line 6: 
ORA-02438: Column check constraint cannot reference other columns 

嗨,任何人都可以幫助嗎?我沒有引用任何其他列,但我收到一條錯誤消息,說我正在引用其他列。列檢查約束完整性問題

+0

請加標籤的RDBMS二手 – Alex

+3

做甲骨文約束要求的名字呢?我試着將它改爲:'CONSTRAINT chk_ctype CHECK(CTYPE IN('INDIVIDUAL','INSTITUTION')));'我還必須在那裏添加另一個右括號,但是它在SQLFiddle中運行正常。 –

+0

@TomH感謝兄弟這就是答案 –

回答

4

我會嘗試將其更改爲:

CONSTRAINT chk_ctype CHECK (CTYPE IN ('INDIVIDUAL', 'INSTITUTION'))); 

我也不得不增加一個右括號出現,但隨後在SQLFiddle運行正常。

2

Oracle中的約束不需要名稱。

相反,即使您使用關鍵字「CONSTRAINT」,但在這種情況下,您必須提供一個名稱,或者您不使用關鍵字「CONSTRAINT」。最後一行的以下語法完美無缺。 (請注意,您做此更改後,你仍然會得到關於對應於該表定義缺少右括號,如湯姆者H已發現的錯誤信息。)

CHECK (CTYPE IN('INDIVIDUAL', 'INSTITUTION')); 

也就是說,如果你不想或者需要爲該約束提供一個名稱,只需從該行刪除單詞「CONSTRAINT」。

http://docs.oracle.com/cd/B19306_01/server.102/b14200/clauses002.htm#CJAGIICD