Oracle
 sql >> Database >  >> RDS >> Oracle

Il nome ORA-00955 è già utilizzato da un oggetto esistente

Forse c'è un INDEX associato al PRIMARY KEY CONSTRAINT , ed è anche chiamato PK_B .

Puoi verificarlo come :

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

Se è vero, allora fai :

ALTER INDEX "PK_B" RENAME TO "PK_XYZ";

Aggiornamento:riguardo a ALTER INDEX dichiarazione, alcuni punti importanti come menzionato da Justin nei commenti

Oracle crea implicitamente un UNIQUE index per supportare il PRIMARY KEY CONSTRAINT . Poiché l'indice ha lo stesso nome della chiave primaria e ora che la chiave primaria è stata modificata, è meglio per eliminare e ricreare nuovamente l'indice secondo la definizione della vecchia chiave primaria.

La mia conclusione :

  • Il vincolo della chiave primaria viene applicato tramite un indice univoco.
  • Se Oracle trova già un indice, univoco o non univoco, lo utilizza come chiave primaria.
  • Se l'indice è stato inizialmente creato come non univoco, continuerà a essere visualizzato come non univoco, tuttavia sarà effettivamente un indice univoco.

Una buona dimostrazione e abbastanza dettagliata anche su altri aspetti, di Arup :Le chiavi primarie garantiscono l'unicità? Ripensaci.