2012-11-12 234 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(无意义的名称)生成。为了能够正确指定外键的约束名称,您需要使用接受答案中的语法。