Как переименовать первичный ключ в Oracle, чтобы его можно было использовать повторно

В Oracle я создаю такую ​​таблицу:

CREATE TABLE "Mig1"(
  "Id" INTEGER  NOT NULL
  , CONSTRAINT "PK_Mig1" PRIMARY KEY 
(
   "Id"  ) 
) 

Затем я переименовываю ПК:

ALTER TABLE "Mig1" RENAME CONSTRAINT "PK_Mig1" TO "PK_XXX"

Затем я переименовываю таблицу:

ALTER TABLE "Mig1" RENAME TO "XXX"

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

CREATE TABLE "Mig1"(
  "Id" INTEGER  NOT NULL
  , CONSTRAINT "PK_Mig1" PRIMARY KEY 
(
   "Id"  ) 
) 

В этот момент я получаю: An error occurred: ORA-00955: name is already used by an existing object. И это потому, что каким-то образом первичный ключ первой таблицы все еще существует, хотя он был переименован. Если я попытаюсь создать вторую таблицу следующим образом:

CREATE TABLE "Mig1"(
  "Id" INTEGER  NOT NULL
  , CONSTRAINT "YYY" PRIMARY KEY 
(
   "Id"  ) 
) 

оно работает. Итак, как мне правильно переименовать первичный ключ со всеми связанными с ним ресурсами, чтобы его имя можно было использовать повторно?


person Dejan    schedule 06.06.2011    source источник


Ответы (1)


Есть индекс, связанный с ограничением первичного ключа, и он, вероятно, все еще называется «PK_Mig1». Попробуй это:

ALTER INDEX "PK_Mig1" RENAME TO "PK_XXX";
person Tony Andrews    schedule 06.06.2011
comment
Работает как шарм. Извините, я не знал, что Oracle поддерживает дополнительный индекс помимо ограничения (исходящего из мира SQL Server). - person Dejan; 06.06.2011
comment
Oracle создает (или захватывает) индекс во всех случаях для поддержания первичного ключа и уникальных ограничений. Иначе как еще вы могли это сделать? - person Adam Musch; 07.06.2011