协助“缺少右括号”错误

时间:2018-04-29 00:19:56

标签: sql oracle

以下语句失败,并显示错误“缺少右括号”:

CREATE TABLE STUDENT
     ( Student# NUMBER(9),
       FirstName VARCHAR2(52),
       LastName VARCHAR2(50),
       DeptID NUMBER(9) NOT NULL, 
       ProjectID NUMBER(5,2) NOT NULL,
       PCID NUMBER(10)  NOT NULL,
       PR# NUMBER(10)  NOT NULL,
       Email VARCHAR(50)
      CONSTRAINT student_student#_pk PRIMARY KEY (student#),
       CONSTRAINT student_deptid_fk FOREIGN KEY (deptid)
             REFERENCES department (deptid),
       CONSTRAINT student_pcid_fk FOREIGN KEY (pcid)
             REFERENCES projectcourse (pcid) ,
       CONSTRAINT student_project#_fk FOREIGN KEY (project#)
             REFERENCES project (project#),
       CONSTRAINT student_pr#_fk FOREIGN KEY (pr#)
             REFRENCES projectregisteration (pr#));

EDITED

经过一些修正后,我仍然遇到ORA-00942: table or view does not exist错误。下面是我的代码目前的样子。任何进一步的建议将不胜感激。

CREATE TABLE STUDENT
     ( Student# NUMBER(9),
       FirstName VARCHAR2(52),
       LastName VARCHAR2(50),
       DeptID NUMBER(9) NOT NULL, 
       Project# NUMBER(5,2) NOT NULL,
       PCID NUMBER(10)  NOT NULL,
       PR# NUMBER(10)  NOT NULL,
       Email VARCHAR2(150),
      CONSTRAINT student_student#_pk PRIMARY KEY (student#),
       CONSTRAINT student_deptid_fk FOREIGN KEY (deptid)
             REFERENCES department (deptid),
       CONSTRAINT student_pcid_fk FOREIGN KEY (pcid)
             REFERENCES projectcourse (pcid) ,
       CONSTRAINT student_project#_fk FOREIGN KEY (project#)
             REFERENCES project (project#),
       CONSTRAINT student_pr#_fk FOREIGN KEY (pr#)
             REFERENCES projectregisteration (pr#));

3 个答案:

答案 0 :(得分:2)

http://delete_me/后遗失,。有一个拼写错误,Email VARCHAR(50)而不是REFRENCES。在REFERENCES中,列CONSTRAINT student_project#_fk FOREIGN KEY (project#)不在上面的列列表中。

答案 1 :(得分:1)

当我们在代码中出现语法错误时,Oracle编译器会抛出缺少右括号

显然,要检查的第一件事是每个左括号都有一个右括号;如果我们使用支持括号匹配的编辑工具(例如通过突出显示匹配对),这很容易。

但我们经常匹配所有括号,为什么我们会收到此错误?它发生在我们遗漏了某些东西时,编译器会将其解释为缺失的括号。

例如,有效的CREATE TABLE语句由​​许多定义列和约束的子句组成,由一对括号括起来(可选地后跟一个存储子句)。重要的是,列和约束子句都用逗号分隔。在您的陈述中,您错过了Email VARCHAR(50)之后的逗号。编译器将此解释为语句的结尾,并期望右括号。但是你的陈述开始了一个约束条款。因此错误信息。

如果编译器足够聪明地识别缺少的逗号,那将是很好的,但这需要编译器进行额外的工作,编译器编写者选择将这项工作外包给我们:)

答案 2 :(得分:0)

查看最后一个外键约束,您将表名称输入为“ projectregisteration”。您确定正确吗?请检查表名是否与您键入的名称相同,并且 not “ projectregistration”(“ registration”中第一个“ t”后没有“ e”)。

如果我创建了第二条CREATE TABLE语句中所示的所有表,则该语句执行没有问题。但是,如果我用最后一个表PROJECTREGISTRATION(正确的“ registration”拼写)代替了PROJECTREGISTERATION(如您的CREATE TABLE所示),则CREATE TABLE失败并显示ORA-00942: table or view does not exist,就像你说的。

所以我怀疑这是一个简单的错字。

dbfiddle here

好运。