SQL 语法错误:“缺少右括号”

SQL Syntax Error: "Missing Right Parenthesis"

提问人:Andrew Biddle 提问时间:2/3/2021 最后编辑:Andrew Biddle 更新时间:2/3/2021 访问量:395

问:

我知道 ORA-00907 表明我的代码中有语法错误,我只是找不到它。有人可以帮忙指出问题吗?我正在使用 SQL Developer (Oracle12c)。

CREATE TABLE equip 
  (equipid NUMBER(3),
   edesc VARCHAR2(30), 
   purchdate DATE, 
   rating CHAR(1), 
   deptid NUMBER(2) NOT NULL, 
   etypeid NUMBER(2),
    CONSTRAINT equip_equipid_pk PRIMARY KEY (equipid),
    CONSTRAINT equip deptid_fk FOREIGN KEY (deptid) REFERENCES dept (deptid),
    CONSTRAINT equip_etypeid_fk FOREIGN KEY (etypeid) REFERENCES etypes (etypeid),
    CONSTRAINT equip_rating_ck CHECK (rating IN ('A','B','C')));

Oracle12 SQL Syntax Error

SQL Oracle 语法错误 oracle12c ora-00907

评论

4赞 marc_s 2/3/2021
将代码作为格式正确的文本发布 - 而不是其屏幕截图......
0赞 Bill Karwin 2/3/2021
真的,这是在操作指南中。使用屏幕截图作为代码使读者无法复制和粘贴您的代码,并且使使用屏幕阅读器的人无法复制和粘贴您的代码。
2赞 Andrew Biddle 2/3/2021
做。添加了正确格式化为文本的代码。@marc_s

答:

5赞 Bill Karwin 2/3/2021 #1

约束名称中有一个空格,这可能会混淆语法解析器:

CONSTRAINT equip deptid_fk FOREIGN KEY (deptid) REFERENCES dept (deptid),
                ^

如果需要标识符中的空格,请用双引号分隔它们,例如 .但是,如果您可以在没有空格或标点符号的情况下拼写标识符,那就更容易了。"equip deptid_fk"

评论

0赞 Andrew Biddle 2/3/2021
棒。感谢您的帮助。简直不敢相信我错过了。
0赞 2/3/2021
@andrewbiddle - 除了这个(正确的)答案之外:你使用的几乎所有界面都会告诉你错误在哪里找到(代码行和行上的位置,或者像上面显示的 Bill 这样的标记)。这应该可以帮助您自己找到并修复错误。
1赞 Bill Karwin 2/3/2021
众所周知,Oracle 错误消息是无用的。我也没有看到这一点,直到我在MySQL中尝试了你的陈述,然后它告诉我问题出在哪里。:-)
1赞 marc_s 2/3/2021
@BillKarwin:谢天谢地,你有SQL代码可以复制和粘贴!;-)