SQL 错误:ORA-00907:缺少右括号 00907。00000 -“缺少右括号”
Posted
技术标签:
【中文标题】SQL 错误:ORA-00907:缺少右括号 00907。00000 -“缺少右括号”【英文标题】:SQL Error: ORA-00907: missing right parenthesis 00907. 00000 - "missing right parenthesis" 【发布时间】:2015-07-01 08:47:58 【问题描述】:使用 sqldeveloper 创建这些表时出现缺少右括号的错误
CREATE TABLE users (
USER_ID INT(10) UNSIGNED NOT NULL,
USERNAME VARCHAR(45) NOT NULL,
PASSWORD VARCHAR(45) NOT NULL,
ENABLED tinyint(1) NOT NULL,
PRIMARY KEY (USER_ID)
);
CREATE TABLE user_roles (
USER_ROLE_ID INT(10) UNSIGNED NOT NULL,
USER_ID INT(10) UNSIGNED NOT NULL,
AUTHORITY VARCHAR(45) NOT NULL,
PRIMARY KEY (USER_ROLE_ID),
KEY FK_user_roles (USER_ID),
CONSTRAINT FK_user_roles FOREIGN KEY (USER_ID)
REFERENCES users (USER_ID)
);
更新...我修改了数据类型但同样的错误
CREATE TABLE users (
USER_ID NUMBER(10,0) UNSIGNED NOT NULL,
USERNAME VARCHAR2(45) NOT NULL,
PASSWORD VARCHAR2(45) NOT NULL,
ENABLED NUMBER(3,0) NOT NULL,
PRIMARY KEY (USER_ID)
);
CREATE TABLE user_roles (
USER_ROLE_ID NUMBER(10,0) UNSIGNED NOT NULL,
USER_ID NUMBER(10,0) UNSIGNED NOT NULL,
AUTHORITY VARCHAR2(45) NOT NULL,
PRIMARY KEY (USER_ROLE_ID),
KEY FK_user_roles (USER_ID),
CONSTRAINT FK_user_roles FOREIGN KEY (USER_ID)
REFERENCES users (USER_ID)
);
【问题讨论】:
这看起来像 mysql(也许?),但它不是 Oracle。查看 Oracle 数据类型的文档。 您确定您使用的是 Oracle RDBMS 吗?还是你想把它从 MySQL 改写成 Oracle? 实际上我之前已经创建了这个..使用 mysql..现在我开始使用 sqldeveloper SQL Developer 是一个客户端工具,而不是 RDBMS。再说一遍,您使用的是哪个 RDBMS? Oracle 数据库 10g 企业版版本 10.2.0.1.0 - 64bi 【参考方案1】: UNSIGNED 在 Oracle 中不受支持。KEY FK_user_roles (USER_ID)语法错误。
如下图创建表:
SQL> CREATE TABLE users (
2 USER_ID NUMBER(10,0) NOT NULL,
3 USERNAME VARCHAR2(45) NOT NULL,
4 PASSWORD VARCHAR2(45) NOT NULL,
5 ENABLED NUMBER(3,0) NOT NULL,
6 PRIMARY KEY (USER_ID)
7 );
Table created.
SQL> CREATE TABLE user_roles (
2 USER_ROLE_ID NUMBER(10,0) NOT NULL,
3 USER_ID NUMBER(10,0) NOT NULL,
4 AUTHORITY VARCHAR2(45) NOT NULL,
5 PRIMARY KEY (USER_ROLE_ID),
6 CONSTRAINT FK_user_roles FOREIGN KEY (USER_ID)
7 REFERENCES users (USER_ID)
8 );
Table created.
SQL>
【讨论】:
【参考方案2】:下面的评论可能对你有帮助
Sql 服务器
CREATE TABLE users (
USER_ID INT/*(10) UNSIGNED*/ NOT NULL,
USERNAME VARCHAR(45) NOT NULL,
PASSWORD VARCHAR(45) NOT NULL,
ENABLED tinyint/*(1)*/ NOT NULL,
PRIMARY KEY (USER_ID)
);
CREATE TABLE user_roles (
USER_ROLE_ID INT/*(10) UNSIGNED*/ NOT NULL,
USER_ID INT/*(10) UNSIGNED*/ NOT NULL,
AUTHORITY VARCHAR(45) NOT NULL,
PRIMARY KEY (USER_ROLE_ID),
/*KEY FK_user_roles (USER_ID),*/
CONSTRAINT FK_user_roles FOREIGN KEY (USER_ID)
REFERENCES users (USER_ID)
);
SQL Fiddle
甲骨文
CREATE TABLE users (
USER_ID INT/*(10) UNSIGNED*/ NOT NULL,
USERNAME VARCHAR(45) NOT NULL,
PASSWORD VARCHAR(45) NOT NULL,
ENABLED smallINT/*tinyint(1)*/ NOT NULL,
PRIMARY KEY (USER_ID)
);
CREATE TABLE user_roles (
USER_ROLE_ID INT/*(10) UNSIGNED*/ NOT NULL,
USER_ID INT/*(10) UNSIGNED*/ NOT NULL,
AUTHORITY VARCHAR(45) NOT NULL,
PRIMARY KEY (USER_ROLE_ID),
/*KEY FK_user_roles (USER_ID),*/
CONSTRAINT FK_user_roles FOREIGN KEY (USER_ID)
REFERENCES users (USER_ID)
);
【讨论】:
您在哪些 Oracle 文档中看到过tinyint
数据类型?发布一个不工作的 SQL Fiddle 有什么意义?
没有。错误地我首先为 sql server 纠正了它以上是关于SQL 错误:ORA-00907:缺少右括号 00907。00000 -“缺少右括号”的主要内容,如果未能解决你的问题,请参考以下文章
错误报告 - ORA-00907: 缺少右括号 00907. 00000 - “缺少右括号
Oracle SQL - 奇怪的“ORA-00907 缺少右括号”错误