«ORA-00907: отсутствует правая скобка» в декларации внешнего ключа - PullRequest
0 голосов
/ 09 февраля 2019

Я студент университета, который плохо знаком с Oracle Live SQL.Мой профессор дал нам одну страницу кода и давай отладим.

Осталась только 1 ошибка в последнем абзаце (Enrollment TABLE).Все таблицы, кроме таблицы 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 голосов
/ 09 февраля 2019

Прежде всего, в конце оператора CREATE TABLE Student отсутствует точка с запятой.

Но я считаю, что ваш учитель хочет подчеркнуть, что ON UPDATE не поддерживается Oracleвнешние ключи .Что касается вопроса, то точка зрения 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
);

Демонстрация на DB Fiddle .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...