2011-06-06 15 views
11

En Oracle, puedo crear una tabla como la siguiente:Cómo cambiar el nombre de una clave principal en Oracle de forma que pueda ser reutilizado

 
CREATE TABLE "Mig1"(
    "Id" INTEGER NOT NULL 
    , CONSTRAINT "PK_Mig1" PRIMARY KEY 
(
    "Id" ) 
) 

Entonces, puedo cambiar el nombre del PK:

 
ALTER TABLE "Mig1" RENAME CONSTRAINT "PK_Mig1" TO "PK_XXX" 

entonces, cambio el nombre de la tabla:

 
ALTER TABLE "Mig1" RENAME TO "XXX" 

entonces, trato de crear otra tabla que utiliza el nombre de la tabla previamente renombrado:

 
CREATE TABLE "Mig1"(
    "Id" INTEGER NOT NULL 
    , CONSTRAINT "PK_Mig1" PRIMARY KEY 
(
    "Id" ) 
) 

En este punto me sale: An error occurred: ORA-00955: name is already used by an existing object. Y esto se debe a que, de alguna manera, la clave principal de la primera tabla todavía está presente de alguna manera, aunque se cambió de nombre. Si trato de crear la segunda tabla como esta:

 
CREATE TABLE "Mig1"(
    "Id" INTEGER NOT NULL 
    , CONSTRAINT "YYY" PRIMARY KEY 
(
    "Id" ) 
) 

funciona. Entonces, ¿cómo cambio el nombre de la clave principal correctamente con todos sus recursos asociados, de modo que su nombre se puede reutilizar?

Respuesta

16

Hay un índice asociado con la restricción de clave primaria, y probablemente todavía se llame "PK_Mig1". Pruebe esto:

ALTER INDEX "PK_Mig1" RENAME TO "PK_XXX"; 
+0

Funciona como un encanto. Lo sentimos, no sabíamos que Oracle mantiene un índice adicional además de la restricción (proveniente del mundo de SQL Server). – Dejan

+0

Oracle crea (o secuestra) un índice en todos los casos para mantener la clave principal y las restricciones únicas. De lo contrario, ¿de qué otra manera podrías hacerlo? –

Cuestiones relacionadas