Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Nazwa ORA-00955 jest już używana przez istniejący obiekt

Być może istnieje INDEX powiązane z PRIMARY KEY CONSTRAINT , i jest również nazwany jako PK_B .

Możesz to sprawdzić jako :

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

Jeśli to prawda, zrób to :

ALTER INDEX "PK_B" RENAME TO "PK_XYZ";

Aktualizacja:dotyczy ALTER INDEX oświadczenie, kilka ważnych punktów, o których wspomina Justin w komentarzach

Oracle niejawnie tworzy UNIQUE indeks do obsługi PRIMARY KEY CONSTRAINT . Ponieważ indeks ma taką samą nazwę jak klucz podstawowy, a teraz, gdy klucz podstawowy jest modyfikowany, jest lepiej aby usunąć i ponownie utworzyć indeks zgodnie z definicją starego klucza głównego.

Mój wniosek:

  • Ograniczenie klucza podstawowego jest wymuszane przez unikalny indeks.
  • Jeśli Oracle już znajdzie indeks – unikalny lub nieunikalny – używa go jako klucza podstawowego.
  • Jeśli indeks został początkowo utworzony jako nieunikatowy, będzie nadal wyświetlany jako nieunikalny, jednak w rzeczywistości będzie indeksem unikalnym.

Dobra demonstracja i dość szczegółowa również w innych aspektach, autorstwa Arupa:Klucze podstawowe gwarantują niepowtarzalność? Pomyśl jeszcze raz.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zadeklarować zmienną i użyć jej w tym samym skrypcie Oracle SQL?

  2. Skonsoliduj kilka wyzwalaczy Oracle. Jakiś wpływ na wydajność?

  3. EF 5 z Oracle edmx StoreGeneratedPattern=Problem z tożsamością

  4. Szybsze mieszanie z mniejszą liczbą kolizji?

  5. Jaka jest dokładnie różnica między indeksem pierwotnym a indeksem wtórnym?