sql >> Database >  >> RDS >> Oracle

ORA-00955 naam wordt al gebruikt door een bestaand object

Misschien is er een INDEX gekoppeld aan de PRIMARY KEY CONSTRAINT , en het wordt ook genoemd als PK_B .

U kunt het controleren als:

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

Als dat waar is, doe dan:

ALTER INDEX "PK_B" RENAME TO "PK_XYZ";

Update:Betreffende ALTER INDEX verklaring, enkele belangrijke punten zoals vermeld door Justin in de opmerkingen

Oracle maakt impliciet een UNIQUE index ter ondersteuning van de PRIMARY KEY CONSTRAINT . Aangezien de index dezelfde naam heeft als de primaire sleutel, en nu de primaire sleutel wordt gewijzigd, is deze beter om de index te verwijderen en opnieuw te maken volgens de definitie van de oude primaire sleutel.

Mijn conclusie :

  • De beperking van de primaire sleutel wordt afgedwongen via een unieke index.
  • Als Oracle al een index vindt – uniek of niet-uniek – gebruikt het deze als primaire sleutel.
  • Als de index aanvankelijk als niet-uniek is gemaakt, wordt deze nog steeds als niet-uniek weergegeven, maar in werkelijkheid is het een unieke index.

Een goede demonstratie en ook behoorlijk gedetailleerd over andere aspecten, door Arup:Primaire sleutels garanderen uniciteit? Denk nog eens na.



  1. Mysql drop-gebruiker met subsidies voor meerdere hosts

  2. Deelnemen aan tabellen van twee verschillende servers

  3. Configureer SQL*Plus om niets anders dan gegevens terug te geven

  4. WebApp (Tomcat-jdbc) Gepoolde DB-verbinding die uitzondering opgeeft