SQLDeveloper — ошибка при выполнении инструкции, но запущенный скрипт работает нормально?

#sql #relational-database #oracle-sqldeveloper #entity-relationship

#sql #реляционная база данных #oracle-sqldeveloper #сущность-отношение

Вопрос:

В программном обеспечении SQLDeveloper есть функция для запуска либо инструкции в скрипте, либо всего скрипта.

Моя проблема в том, что мой SQL-скрипт работает нормально, когда я запускаю весь скрипт, но выдает ORA-00955: name is already used by an existing object ошибку при попытке запустить один оператор.

Например, мой сценарий выглядит следующим образом:

 DROP TABLE "Movie" CASCADE CONSTRAINTS;
DROP TABLE "Critic" CASCADE CONSTRAINTS;
DROP TABLE "Review" CASCADE CONSTRAINTS;

CREATE TABLE "Critic" (
  "cID" int NOT NULL, /* Since a review cannot have no critics*/
  "CriticName" varchar(100),
  "PhoneNumber" varchar(10),
  PRIMARY KEY ("cID")
);

CREATE TABLE "Movie" (
  "mID" int,
  "Title" varchar(255),
  "ReleaseDate" DATE,
  "Rating" int,
  "RunningTime" INTEGER, /*To store the duration of the film in minutes*/
  "Director" varchar(100),
  "Actor(s)" int,
  PRIMARY KEY ("mID")
);

CREATE TABLE "Review" (
  "rID" int,
  "mID" int,
  FOREIGN KEY ("mID") REFERENCES "Movie"("mID"),
  "cID" int,
  FOREIGN KEY ("cID") REFERENCES "Critic"("cID"),
  "Rating" int,
  PRIMARY KEY ("rID")
  

Почему этот скрипт будет работать нормально в целом, но потерпит неудачу, если я попытаюсь запустить только один оператор?

Для справки, функция, о которой я говорю, выглядит так в графическом интерфейсе:

введите описание изображения здесь

Комментарии:

1. Если вы просто запустите один оператор, вы, вероятно, пропустили drop инструкции.

2. Итак, поскольку я еще не удалил таблицы, выдается ли ошибка, поскольку инструмент собирает более старые экземпляры таблиц из предыдущих итераций запуска скрипта?

3. ДА. Ошибка также должна быть довольно очевидной.

Ответ №1:

Понял это благодаря объяснению @Gordon Linoff.

Перед созданием таблицы необходимо выполнить команду drop table. И поскольку команда run statement выполняет только один оператор, команда drop никогда не вызывается, вызывая ошибку.

Чтобы исправить это, можно просто выделить как команду удаления, так и команду создания, а затем нажать «Выполнить инструкцию», решив проблему.