【问题标题】:SQL Error: Missing Right Parenthesis in Line 1 ORA-00907SQL 错误:第 1 行中缺少右括号 ORA-00907
【发布时间】:2014-11-03 01:57:16
【问题描述】:

我检查了其他类似的问题。关于重复逗号,命令错误但在我的错误中找不到任何内容。我还搜索了创建表的示例以与我的进行比较,但没有发现任何区别:(。

下面是创建表语句:

CREATE TABLE DRIVER(L# VARCHAR(15) NOT NULL
                       , DNAME VARCHAR(75) NOT NULL
                       , STATUS  VARCHAR(50) NOT NULL
                       , NRIC VARCHAR (15) NOT NULL
                       , PRIMARY KEY(L#)
                       , CANDIDATE KEY(NRIC)
      );

任何人都可以帮我指出我看不到或遗漏的东西,谢谢(:

【问题讨论】:

标签: sql oracle sqlplus create-table


【解决方案1】:

您不能像在 Oracle 中那样指定 CANDIDATE KEY。正确的方法是在您的候选键上创建一个UNIQUE CONSTRAINT。

像这样。

这是一个有效的 SQLFiddle:http://sqlfiddle.com/#!4/b392d/1

CREATE TABLE DRIVER(
    L# VARCHAR(15) NOT NULL, 
    DNAME VARCHAR(75) NOT NULL, 
    STATUS VARCHAR(50) NOT NULL, 
    NRIC VARCHAR (15) NOT NULL, 
  PRIMARY KEY(L#),
    CONSTRAINT UK_NRIC UNIQUE (NRIC)
);

【讨论】:

  • 命名约束是个好主意,包括(尤其是)主键。当它们具有系统生成的名称时,管理它们及其关联的索引是一个主要的痛苦。
【解决方案2】:

ORA-00907 几乎总是表示语法错误。当解析器在期望关键字或右括号关闭当前语句的位置找到一个不是关键字的单词时会发生这种情况(因此Missing Right Parenthesis)。虽然有时可能只是我们有一个无与伦比的左括号:一个像样的文本编辑器可以帮助追踪它。

在您的情况下,侵入词是CANDIDATE。语法错误对于初学者来说可能很棘手。我建议您熟悉一下 Oracle 文档:它是在线的、完整的、免费的,并且有很多示例。 Check it out 。 list of reserved words 可能对您有所帮助,因为 CANDIDATE 不在上面,这是一个很大的线索。

【讨论】:

    【解决方案3】:

    如果您要在名称中使用奇数字符,请将其括在方括号中。 []

    【讨论】:

      猜你喜欢
      • 2016-10-23
      • 2018-03-27
      • 2023-03-13
      • 1970-01-01
      • 2015-03-31
      • 2018-07-18
      • 1970-01-01
      • 2017-11-19
      相关资源
      最近更新 更多