Oracle
 sql >> Base de données >  >> RDS >> Oracle

Le nom ORA-00955 est déjà utilisé par un objet existant

Peut-être y a-t-il un INDEX associé à la PRIMARY KEY CONSTRAINT , et il est également nommé PK_B .

Vous pouvez le vérifier comme :

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

Si c'est vrai, alors faites :

ALTER INDEX "PK_B" RENAME TO "PK_XYZ";

Mise à jour :concernant ALTER INDEX déclaration, quelques points importants comme mentionné par Justin dans les commentaires

Oracle crée implicitement un UNIQUE index pour prendre en charge la PRIMARY KEY CONSTRAINT . Depuis, l'index porte le même nom que celui de la clé primaire, et maintenant que la clé primaire est en cours de modification, c'est mieux pour supprimer et recréer l'index selon la définition de l'ancienne clé primaire.

Ma conclusion :

  • La contrainte de clé primaire est appliquée via un index unique.
  • Si Oracle trouve déjà un index - unique ou non unique - il l'utilise pour la clé primaire.
  • Si l'index a été initialement créé comme non unique, il continuera à s'afficher comme non unique, mais il s'agira en fait d'un index unique.

Une bonne démonstration et assez détaillée sur d'autres aspects aussi, par Arup :Les clés primaires garantissent l'unicité ? Détrompez-vous.