外键声明中的“ ORA-00907:缺少右括号”

时间:2019-02-08 22:58:11

标签: sql oracle

我是一名大学生,刚接触Oracle Live SQL。我的教授给了我们一页代码,让我们调试。

仅剩最后一段(Enrollment TABLE)中的1个错误。 Enrollment表以外的所有表均已成功创建。我在最后一段花了6个小时,但仍然找不到错误的地方。我已经检查了网上的所有信息,但没有找到解决方案。

请帮助,谢谢!

CREATE TABLE Faculty ( 
FacNo         CHAR(11)      NOT NULL, 
FacFirstName  VARCHAR(30)   NOT NULL, 
FacLastName   VARCHAR(30)   NOT NULL, 
FacCity       VARCHAR(30)   NOT NULL, 
FacState      CHAR(2)       NOT NULL, 
FacDept       CHAR(6)       NULL, 
FacRank       CHAR(4)       NULL, 
FacSalary     DECIMAL(10,2) NULL, 
FacSupervisor CHAR(11)      NULL, 
FacHireDate   DATE      NULL, 
FacZipCode    CHAR(10)      NOT NULL, 
CONSTRAINT FacultyPK PRIMARY KEY (FacNo),  
CONSTRAINT SupervisorFK FOREIGN KEY (FacSupervisor) REFERENCES Faculty);

CREATE TABLE Course ( 
CourseNo      CHAR(6)       NOT NULL, 
CrsDesc       VARCHAR(50)   NOT NULL, 
CrsUnits      INTEGER       NULL, 
CONSTRAINT CoursePK PRIMARY KEY (CourseNo) );

CREATE TABLE Offering ( 
OfferNo       INTEGER       NOT NULL, 
CourseNo      CHAR(6)       NOT NULL, 
OffTerm       CHAR(6)       NOT NULL, 
OffYear       INTEGER       NOT NULL, 
OffLocation   VARCHAR(30)   NULL, 
OffTime       VARCHAR(10)   NULL, 
FacNo         CHAR(11)      NULL, 
OffDays       CHAR(4)       NULL, 
CONSTRAINT OfferingPK PRIMARY KEY (OfferNo), 
CONSTRAINT CourseFK FOREIGN KEY (CourseNo) REFERENCES Course, 
CONSTRAINT FacultyFK FOREIGN KEY (FacNo) REFERENCES Faculty);

CREATE TABLE Student ( 
StdNo         CHAR(11)      NOT NULL, 
StdFirstName  VARCHAR(30)   NOT NULL, 
StdLastName   VARCHAR(30)   NOT NULL, 
StdCity       VARCHAR(30)   NOT NULL, 
StdState      CHAR(2)       NOT NULL, 
StdZip        CHAR(10)      NOT NULL, 
StdMajor      CHAR(6)       NULL, 
StdClass      CHAR(2)       NULL, 
StdGPA        DECIMAL(3,2)  NULL, 
CONSTRAINT StudentPk PRIMARY KEY (StdNo) ) 

CREATE TABLE Enrollment( 
OfferNo       INTEGER       NOT NULL, 
StdNo         CHAR(11)      NOT NULL, 
EnrGrade      DECIMAL(3,2)  NULL, 
CONSTRAINT EnrollmentPK PRIMARY KEY (OfferNo,StdNo), 
CONSTRAINT OfferingFK FOREIGN KEY (OfferNo) REFERENCES Offering 
                      ON DELETE CASCADE
                      ON UPDATE CASCADE, 
CONSTRAINT StudentFK FOREIGN KEY (StdNo) REFERENCES Student 
                      ON DELETE CASCADE 
                      ON UPDATE CASCADE);

1 个答案:

答案 0 :(得分:1)

首先,CREATE TABLE Student语句的末尾缺少分号。

但是我相信您的老师想强调的是Oracle外键不支持 ON UPDATE 。就问题而言,Oracle的观点是主键是不可变的。

如果您对语句的这一部分进行注释,则代码可以正常运行:

CREATE TABLE Enrollment( 
OfferNo       INTEGER       NOT NULL, 
StdNo         CHAR(11)      NOT NULL, 
EnrGrade      DECIMAL(3,2)  NULL, 
CONSTRAINT EnrollmentPK PRIMARY KEY (OfferNo,StdNo), 
CONSTRAINT OfferingFK FOREIGN KEY (OfferNo) REFERENCES Offering 
                      ON DELETE CASCADE,
                      -- ON UPDATE CASCADE, 
CONSTRAINT StudentFK FOREIGN KEY (StdNo) REFERENCES Student 
                      ON DELETE CASCADE 
                      -- ON UPDATE CASCADE
);

Demo on DB Fiddle