Oracle
 sql >> база данни >  >> RDS >> Oracle

Името ORA-00955 вече се използва от съществуващ обект

Може би има INDEX свързан с PRIMARY KEY CONSTRAINT , и също така се нарича PK_B .

Можете да го проверите като:

SELECT * FROM USER_INDEXES WHERE TABLE_NAME='<table_name>';

Ако това е вярно, тогава направете :

ALTER INDEX "PK_B" RENAME TO "PK_XYZ";

Актуализация:Относно ALTER INDEX изявление, няколко важни точки, както е споменато от Джъстин в коментарите

Oracle имплицитно създава UNIQUE индекс за поддръжка на PRIMARY KEY CONSTRAINT . Тъй като индексът е със същото име като на първичния ключ и сега, когато първичният ключ се променя, той е по-добър за премахване и създаване на отново индекса според дефиницията на стария първичен ключ.

Моето заключение:

  • Ограничението на първичния ключ се налага чрез уникален индекс.
  • Ако Oracle вече намери индекс – уникален или неуникален – той го използва за първичен ключ.
  • Ако индексът първоначално е бил създаден като неуникален, той ще продължи да се показва като неуникален, но всъщност ще бъде уникален индекс.

Добра демонстрация и доста подробна и за други аспекти, от Arup:Гарантират ли първичните ключове уникалност? Помислете отново.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:производителност на групово събиране

  2. Oracle променя таблицата с недостатъчни привилегии

  3. ORA-30926 - Състояние на сливане

  4. Обяснение на оператора на Oracle INTERSECT

  5. Въведение в PL/SQL колекциите в Oracle Database