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: 缺少右括号 2

错误报告 - ORA-00907: 缺少右括号 00907. 00000 - “缺少右括号

sql错误:ORA-00907:缺少右括号[重复]

Oracle SQL - 奇怪的“ORA-00907 缺少右括号”错误

在 oracle 10g 中出现错误 .. 错误:- ORA-00907:缺少右括号

Oracle SQL ORA-00907: CASE 语句中缺少右括号错误