以下语句失败,并显示错误“缺少右括号”:
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#));
经过一些修正后,我仍然遇到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#));
答案 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
,就像你说的。
所以我怀疑这是一个简单的错字。
好运。