Справка по внешнему ключу SQL. ORA-00907 Отсутствует правая скобка - PullRequest
0 голосов
/ 21 января 2019

Я новичок в SQL, и у меня возникли проблемы с внешними ключами в таблице CourseEnrollments.

Я получаю сообщение об ошибке - ORA-00907: отсутствует правая скобка 00907. 00000 - "отсутствует правая скобка * Причина: * Действие:

Похоже, что все запятые и скобки находятся вместо.

Create Table Students 
(
StudentID INT NOT NULL,
Lastname VARCHAR2(25),
Firstname VARCHAR2(20),
Email VARCHAR2(40),
Enrollmentdate DATE,
CONSTRAINT student_pk PRIMARY KEY (StudentID)
);

/* This is the creation of the Students table */

Create Table Faculty 
(
FacultyID INT NOT NULL,
Lastname VARCHAR2(25),
Firstname VARCHAR2(20),
Email VARCHAR2(40),
Hiredate DATE,
CONSTRAINT faculty_pk PRIMARY KEY (FacultyID)
);

/* This is the creation of the Faculty table */

Create Table Courses 
(
CourseID INT NOT NULL,
"Subject (e.g. SDEV)" VARCHAR2(20),
"Catalognbr (e.g. 350)" NUMBER,
"Title (e.g. Database Security)" VARCHAR2(40),
CONSTRAINT course_pk PRIMARY KEY (CourseID)
);

/* This is the creation of the Courses table */

Create Table CourseEnrollments 
(
EnrollmentID INT NOT NULL,
  CONSTRAINT fk_Students
  FOREIGN KEY (StudentID)
  REFERENCES Students(StudentID)
CONSTRAINT fk_Faculty
  FOREIGN KEY (FacultyID)
  REFERENCES Faculty(FacultyID)
CONSTRAINT fk_Courses
  FOREIGN KEY (CourseID)
  REFERENCES Courses(CourseID)
CONSTRAINT enrollment_pk PRIMARY KEY (EnrollmentID)
);

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Это сообщение

ORA-00907: missing right parenthesis

... всегда указывает на синтаксическую ошибку. Иногда это действительно означает, что мы сняли скобку. Часто это означает, что мы неправильно написали ключевое слово или пропустили элемент, поэтому компилятор находит ключевое слово или что-то еще, чего он не ожидал.

В этом случае вы опускаете запятые в предложениях ограничений. Компилятор ожидает, что предложения таблицы (объявления столбцов и ограничений) будут разделены запятыми. Когда заканчивается один такой пункт, он ищет запятую; не найдя запятую, ожидается, что ) указывает на конец спецификации таблицы. Вместо этого он нашел constraint и бросил ORA-00907.

0 голосов
/ 21 января 2019

Прежде всего, столбец, который необходимо ограничить, должен быть определен сначала явно, затем вы можете определить ограничение. Более того, когда вы определяете более одного ограничения, тогда они должны быть разделены запятой. Вот рабочий код (остальная часть кода уже в порядке).

Create Table CourseEnrollments 
(
EnrollmentID INT NOT NULL,
StudentID int,
FacultyID int,
CourseID int,
CONSTRAINT fk_Students
  FOREIGN KEY (StudentID)
  REFERENCES Students(StudentID),
CONSTRAINT fk_Faculty
  FOREIGN KEY (FacultyID)
  REFERENCES Faculty(FacultyID),
CONSTRAINT fk_Courses
  FOREIGN KEY (CourseID)
  REFERENCES Courses(CourseID),
CONSTRAINT enrollment_pk PRIMARY KEY (EnrollmentID)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...