#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 никогда не вызывается, вызывая ошибку.
Чтобы исправить это, можно просто выделить как команду удаления, так и команду создания, а затем нажать «Выполнить инструкцию», решив проблему.