Ошибка имени SQL с внешним ключом в коде SQL - PullRequest
0 голосов
/ 06 декабря 2018

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

DROP TABLE STUDENT;
CREATE TABLE STUDENT
(stuID VARCHAR (7) PRIMARY KEY NOT NULL,
major VARCHAR (15) NOT NULL,
firstName VARCHAR (15) NOT NULL,
lastName VARCHAR (15) NOT NULL,
yr  VARCHAR(8) NOT NULL
);

DROP TABLE ENROLL;
CREATE TABLE ENROLL
(stuID VARCHAR (7) NOT NULL,
grade VARCHAR (1) NOT NULL,
courseID VARCHAR(7) NOT NULL,
  CONSTRAINT fk_STUDENT
   FOREIGN KEY (stuID)
   REFERENCES STUDENT(stuid)
);

DROP TABLE CLASS;
CREATE TABLE CLASS
(instructorID VARCHAR(7) NOT NULL,
classRoomNumber VARCHAR(7) NOT NULL,
dateStarts DATE NOT NULL,
courseID VARCHAR(7) PRIMARY KEY NOT NULL,
description CHAR(100) NOT NULL,
 CONSTRAINT fk_INSTRUCTOR
  FOREIGN KEY (instructorID)
  REFERENCES INSTRUCTOR(instructorid)
);

DROP TABLE INSTRUCTOR;
CREATE TABLE INSTRUCTOR
(firstName VARCHAR (15) NOT NULL,
lastName VARCHAR (15) NOT NULL,
departmentName VARCHAR (15) NOT NULL,
instructorID VARCHAR(7) PRIMARY KEY NOT NULL
);

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

В комментарии вы сказали, что все еще есть ошибка.

Если вы создаете (и / или удаляете) таблицы в правильном порядке, все в порядке.Я предпочитаю бросать их отдельно.

Сначала таблицы не существуют, поэтому я просто создам их:

SQL> CREATE TABLE student (
  2    stuid       VARCHAR(7) PRIMARY KEY NOT NULL,
  3    major       VARCHAR(15) NOT NULL,
  4    firstname   VARCHAR(15) NOT NULL,
  5    lastname    VARCHAR(15) NOT NULL,
  6    yr          VARCHAR(8) NOT NULL
  7  );

Table created.

SQL> CREATE TABLE enroll (
  2    stuid      VARCHAR(7) NOT NULL,
  3    grade      VARCHAR(1) NOT NULL,
  4    courseid   VARCHAR(7) NOT NULL,
  5    CONSTRAINT fk_student FOREIGN KEY ( stuid )
  6      REFERENCES student ( stuid )
  7  );

Table created.

SQL> CREATE TABLE instructor (
  2    firstname        VARCHAR(15) NOT NULL,
  3    lastname         VARCHAR(15) NOT NULL,
  4    departmentname   VARCHAR(15) NOT NULL,
  5    instructorid     VARCHAR(7) PRIMARY KEY NOT NULL
  6  );

Table created.

SQL> CREATE TABLE class (
  2    instructorid      VARCHAR(7) NOT NULL,
  3    classroomnumber   VARCHAR(7) NOT NULL,
  4    datestarts        DATE NOT NULL,
  5    courseid          VARCHAR(7) PRIMARY KEY NOT NULL,
  6    description       CHAR(100) NOT NULL,
  7    CONSTRAINT fk_instructor FOREIGN KEY ( instructorid )
  8      REFERENCES instructor ( instructorid )
  9  );

Table created.

Удаляем таблицы в обратном порядке, чтобы детали отбрасывались перед их мастером

SQL> DROP TABLE enroll;

Table dropped.

SQL> DROP TABLE student;

Table dropped.

SQL> DROP TABLE class;

Table dropped.

SQL> DROP TABLE instructor;

Table dropped.

SQL>
0 голосов
/ 07 декабря 2018

На таблицу INSTRUCTOR ссылается таблица CLASS, поэтому вам необходимо создать таблицу INSTRUCTOR до создать таблицу CLASS.

Также вам следует использовать DROP TABLE ... CASCADE CONSTRAINTS вместо просто DROP TABLE ....Это позволяет правильно отбрасывать внешний и первичный ключи одновременно с таблицей и может избежать ошибки name already used by existing object, которую вы получаете в настоящее время.

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