2014-04-07 102 views
0

我想在oracle中創建一個表,但出現此錯誤:未知命令「)」 - 其餘行被忽略。我無法弄清楚是什麼導致這個錯誤。以下是我對該表的SQL:在oracle中創建表時出錯

CREATE TABLE PAYMENT 
    (PayNum INT NOT NULL PRIMARY KEY, 
    CType VARCHAR(1) NOT NULL, 
    CCNum VARCHAR(16) NOT NULL, 
    BankName VARCHAR(75) NOT NULL, 
    AccNum INT NOT NULL, 
    PDate DATE NOT NULL, 
    Amt DECIMAL(11,2) NOT NULL, 
    CONSTRAINT fk_BANKACC_PAYMENT FOREIGN KEY (BankName, AccNum) 
    REFERENCES BANKACC(BankName, AccNum), 
    CONSTRAINT fk_CRCARD_PAYMENT FOREIGN KEY (CType, CCNum) 
    REFERENCES CRCARD(CType, CCNum) 

); 
+4

你用什麼客戶端來運行這個語句?某些客戶端(例如SQL * Plus)不喜歡空白行,並且在右括號之前有空行。 –

+0

這很像這個問題,Alex Poole的回答解決了這個問題。 –

回答

2

你的代碼是正確的。確保你正在引用主鍵(全部4個)。 檢查:http://sqlfiddle.com/#!2/7be70/1/0

如果你不遵守,你可能會得到這個錯誤:有在引用表「BANKACC」的引用列的列表中的外鍵「fk_BANKACC_PAYMENT」相匹配的任何主要或候選鍵。 代碼在上面的小提琴:

CREATE TABLE BANKACC 
(BankName VARCHAR(75) NOT NULL, 
    AccNum INT NOT NULL, 
PRIMARY KEY(BankName, AccNum)); 

CREATE TABLE CRCARD 
(CType VARCHAR(1) NOT NULL, 
    CCNum VARCHAR(16) NOT NULL, 
PRIMARY KEY(CType, CCNum)); 

CREATE TABLE PAYMENT 
    (PayNum INT NOT NULL PRIMARY KEY, 
    CType VARCHAR(1) NOT NULL, 
    CCNum VARCHAR(16) NOT NULL, 
    BankName VARCHAR(75) NOT NULL, 
    AccNum INT NOT NULL, 
    PDate DATE NOT NULL, 
    Amt DECIMAL(11,2) NOT NULL, 
    CONSTRAINT fk_BANKACC_PAYMENT FOREIGN KEY (BankName, AccNum) 
    REFERENCES BANKACC(BankName, AccNum), 
    CONSTRAINT fk_CRCARD_PAYMENT FOREIGN KEY (CType, CCNum) 
    REFERENCES CRCARD(CType, CCNum) 

); 

你也應該閱讀本關於如何實現外鍵約束更好的理解:如果你在SQL * Plus運行此http://docs.oracle.com/cd/E17952_01/refman-5.5-en/create-table-foreign-keys.html

2

,擺脫REFERENCES)之間的空行:

REFERENCES CRCARD(CType, CCNum) 
); 

或者set sqlblanklines on to change the behaviour

默認情況下,它會將空行解釋爲語句的結尾,但不會運行它。因此,您的整個CREATE TABLE命令基本上被忽略,並且);被視爲stanalone命令。因此,你得到的錯誤信息,因爲它本身並不意味着任何東西。

+0

剛纔注意到彼得勳爵剛纔在評論中提到了這個...... –

+1

+1我不知道sqlblanklines設置。 –