2012-11-12 194 views
4

我正試圖在Oracle 11g中執行這個腳本,並且得到以下錯誤,我不知道我錯在哪裏,或者錯誤是什麼,請幫我解決這個問題。SQL - 缺少右括號

腳本:

CREATE TABLE User_Role ( 
    user_role_id INT NOT NULL , 
    Users_user_id INT FOREIGN KEY REFERENCES Users(user_id), 
    User_Types_user_type VARCHAR(20) FOREIGN KEY REFERENCES User_Types(user_type), 
    PRIMARY KEY(user_role_id) 
) 

錯誤:

ORA-00907: missing right parenthesi

回答

5

刪除FOREIGN KEY條款。重寫你的CREATE TABLE聲明如下:

CREATE TABLE User_Role ( 
     user_role_id   INT NOT NULL , 
     Users_user_id  INT REFERENCES Users(user_id), 
     User_Types_user_type VARCHAR(20) REFERENCES User_Types(user_type), 
     PRIMARY KEY(user_role_id) 
    ) 

在這種情況下,約束名稱將被甲骨文產生。如果你想給他們更有意義的名稱,你可以寫你的create table聲明如下:

CREATE TABLE User_Role1 ( 
     user_role_id   INT NOT NULL , 
     Users_user_id  INT , 
     User_Types_user_type VARCHAR(20) , 
     constraint PK_YourTable PRIMARY KEY(user_role_id), 
     constraint FK_Table_1 foreign key(Users_user_id) REFERENCES Users(user_id), 
     constraint FK_Table_2 foreign key(User_Types_user_type) REFERENCES User_Types(user_type) 
    ) 
0

我認爲你需要首先定義列,然後添加FOREIGN KEY約束以非常相似的方式要添加PRIMARY KEY約束如下:

CREATE TABLE User_Role ( 
     user_role_id INT NOT NULL , 
     Users_user_id INT, 
     User_Types_user_type VARCHAR(20), 
     FOREIGN KEY (Users_user_id) REFERENCES Users(user_id), 
     FOREIGN KEY (User_Types_user_type) REFERENCES User_Types(user_type), 
     PRIMARY KEY(user_role_id) 
    ) 
0

除去int的長度並重新編譯

實施例: -

integer (20) not null 
integer not null 
User_Types_user_type VARCHAR(20), 
User_Types_user_type VARCHAR, 
+0

示例中沒有'integer(20)'。沒有大小的'VARCHAR'在Oracle中無效。 –

0

可以內聯指定的外鍵,你只需要刪除foreign key關鍵字:

CREATE TABLE User_Role 
(
    user_role_id   INT NOT NULL , 
    Users_user_id   INT   REFERENCES Users, 
    User_Types_user_type VARCHAR(20) REFERENCES User_Types, 
    PRIMARY KEY(user_role_id) 
); 

SQLFiddle例如:http://sqlfiddle.com/#!4/4ca9f/1

清單主鍵列在「參考文獻」部分可選的。如果你願意,你也可以寫REFERENCES Users(user_id)

這種格式還有一個缺點,即約束名稱將由Oracle(無意義的名稱)生成。爲了能夠正確指定外鍵的約束名稱,您需要使用接受答案中的語法。