ORA-00907 ВОДЯТ МЕНЯ БЕЗУМНЫМИ - PullRequest
1 голос
/ 20 октября 2019

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

CREATE TABLE COURSE(
  CRS_CODE VARCHAR(8) NOT NULL,
  CRS_DESCRIPTION VARCHAR(35) NOT NULL,
  CRS_CREDIT INTEGER DEFAULT 4 NOT NULL CHECK(CRS_CREDIT IN (1,2,3,4)),
  PRIMARY KEY (CRS_CODE));

CREATE TABLE CLASS (
  CRS_CODE VARCHAR(8) NOT NULL,
  CLASS_CODE INTEGER (5) NOT NULL,
  CHECK (CLASS_SECTION IN (0,1,2,3,4,5,6,7,8)),
  CLASS_TIME VARCHAR(25) NOT NULL,
  CLASS_ROOM CHAR(6),
  CRS_CODE REFERENCES COURSE(CRS_CODE),
  PRIMARY KEY (CLASS_CODE));

CREATE TABLE STUDENT(
  STU_NUM INTEGER NOT NULL,
  STU_LNAME VARCHAR(25) NOT NULL,
  STU_FNAME VARCHAR(20) NOT NULL,
  STU_INIT VARCHAR(1),
  STU_DOB DATE,
  STU_HRS INTEGER DEFAULT 0 CHECK (STU_HRS>=0 AND STU_HRS<1000),
  STU_CLASS VARCHAR(2) CHECK (STU_CLASS IN ('Fr', 'So', 'Jr', 'Sr', 'Gr')),
  STU_GPA DECIMAL(3,2) DEFAULT 0.00 CHECK (STU_GPA BETWEEN 0.00 AND 4.00),
  STU_PHONE INTEGER(4),
  PRIMARY KEY (STU_NUM));

CREATE TABLE ENROLL(
  ENROLL_GRADE VARCHAR(1) DEFAULT 'Z' CHECK (ENROLL_GRADE IN('A','B','C','D','F','I','W','Z')),
  STU_NUM INTEGER REFERENCES STUDENT(STU_NUM),
  CLASS_CODE INTEGER (5) REFERENCES CLASS(CLASS_CODE));

Ответы [ 3 ]

1 голос
/ 20 октября 2019

Это слишком долго для комментария.

Одна из целей лабораторных работ - научиться отлаживать свой код. Метод проб и ошибок в академической среде гораздо эффективнее, чем в «реальном мире».

Для отладки, упрощения! Первый вопрос: где возникает ошибка? Это происходит при первом создании таблицы? В секунду? И так далее. Вы можете определить это, создав первую таблицу. Затем первые две таблицы и т. Д.

Если у вас есть таблица, вы сможете быстро обнаружить ошибку. Если нет, вы можете закомментировать определения столбцов по одному за раз.

Когда вы сделаете это, вы обнаружите как минимум две ошибки:

  • Столбец, на который ссылаетсяограничение не определено.
  • Тип данных, которому неверно задан параметр длины.

Кроме того, если вы используете Oracle, рекомендуемый тип для строк - varchar2(), а неvarchar().

0 голосов
/ 22 октября 2019

Ниже приведен табличный анализ проблем с вашим кодом.

Таблица COURSE: ok

Таблица CLASS:

CLASS_CODE INTEGER(5) NOT NULL

Тип данных INTEGER не принимает длину

CHECK (CLASS_SECTION IN (0,1,2,3,4,5,6,7,8))

Столбец CLASS_SECTION не существует в таблице. Я предполагаю, что вы имели в виду CLASS_CODE.

CRS_CODE REFERENCES COURSE(CRS_CODE)

Объявление ограничения внешнего ключа должно быть помещено непосредственно в строку, определяющую ссылающийся столбец.

Таблица STUDENT:

STU_PHONE INTEGER(4)

См. Выше

Таблица ENROLL:

CLASS_CODE INTEGER (5)

См. Выше.


После устранения этих проблем можно успешно создать 4 таблицы.

Демонстрация на скрипте БД :

CREATE TABLE COURSE(
  CRS_CODE VARCHAR(8) NOT NULL,
  CRS_DESCRIPTION VARCHAR(35) NOT NULL,
  CRS_CREDIT INTEGER DEFAULT 4 NOT NULL CHECK(CRS_CREDIT IN (1,2,3,4)),
  PRIMARY KEY (CRS_CODE));

CREATE TABLE CLASS (
  CRS_CODE VARCHAR(8) NOT NULL REFERENCES COURSE(CRS_CODE),
  CLASS_CODE INTEGER NOT NULL CHECK (CLASS_CODE IN (0,1,2,3,4,5,6,7,8)),
  CLASS_TIME VARCHAR(25) NOT NULL,
  CLASS_ROOM CHAR(6),
  PRIMARY KEY (CLASS_CODE)
);

CREATE TABLE STUDENT(
  STU_NUM INTEGER NOT NULL,
  STU_LNAME VARCHAR(25) NOT NULL,
  STU_FNAME VARCHAR(20) NOT NULL,
  STU_INIT VARCHAR(1),
  STU_DOB DATE,
  STU_HRS INTEGER DEFAULT 0 CHECK (STU_HRS>=0 AND STU_HRS<1000),
  STU_CLASS VARCHAR(2) CHECK (STU_CLASS IN ('Fr', 'So', 'Jr', 'Sr', 'Gr')),
  STU_GPA DECIMAL(3,2) DEFAULT 0.00 CHECK (STU_GPA BETWEEN 0.00 AND 4.00),
  STU_PHONE INTEGER,
  PRIMARY KEY (STU_NUM));

CREATE TABLE ENROLL(
  ENROLL_GRADE VARCHAR(1) DEFAULT 'Z' CHECK (ENROLL_GRADE IN('A','B','C','D','F','I','W','Z')),
  STU_NUM INTEGER REFERENCES STUDENT(STU_NUM),
  CLASS_CODE INTEGER REFERENCES CLASS(CLASS_CODE)
);
0 голосов
/ 20 октября 2019

Я думаю, что вы забыли столбец

CREATE TABLE CLASS (
  CRS_CODE VARCHAR(8) NOT NULL,
  CLASS_CODE INTEGER (5) NOT NULL,
  CHECK (CLASS_SECTION IN (0,1,2,3,4,5,6,7,8)),
  CLASS_TIME VARCHAR(25) NOT NULL,
  CLASS_ROOM CHAR(6),
  CRS_CODE REFERENCES COURSE(CRS_CODE),
  PRIMARY KEY (CLASS_CODE));

ORA-00904: "CLASS_SECTION": неверный идентификатор

...