sql >> Base de Datos >  >> RDS >> Oracle

El nombre ORA-00955 ya está en uso por un objeto existente

Quizás haya un INDEX asociado con la PRIMARY KEY CONSTRAINT , y también se nombra como PK_B .

Puede comprobarlo como:

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

Si eso es cierto, entonces haz:

ALTER INDEX "PK_B" RENAME TO "PK_XYZ";

Actualización:con respecto a ALTER INDEX declaración, algunos puntos importantes mencionados por Justin en los comentarios

Oracle crea implícitamente un UNIQUE índice para admitir la PRIMARY KEY CONSTRAINT . Ya que el índice tiene el mismo nombre que la clave principal, y ahora que se modifica la clave principal, es mejor para eliminar y volver a crear el índice según la definición de la clave principal anterior.

Mi conclusión:

  • La restricción de clave principal se aplica a través de un índice único.
  • Si Oracle ya encuentra un índice, único o no único, lo usa como clave principal.
  • Si el índice se creó inicialmente como no único, seguirá mostrándose como no único, sin embargo, en realidad será un índice único.

Una buena demostración y bastante detallada en otros aspectos también, por Arup:¿Las claves principales garantizan la singularidad? Piénsalo de nuevo.