如何在Oracle中重命名主键,以便可以重用它

时间:2011-06-06 12:57:28

标签: oracle ora-00955

在Oracle上,我创建了一个这样的表:

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

然后,我重命名PK:

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

然后,我重命名表:

ALTER TABLE "Mig1" RENAME TO "XXX"

然后,我尝试创建另一个使用以前重命名的表名称的表:

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

此时我得到:An error occurred: ORA-00955: name is already used by an existing object。这是因为不知何故,第一个表的主键仍以某种方式存在,尽管它已被重命名。如果我尝试像这样创建第二个表:

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

它有效。那么如何正确地使用其所有相关资源重命名主键,以便可以重用其名称?

1 个答案:

答案 0 :(得分:19)

有一个与主键约束关联的索引,它可能仍称为“PK_Mig1”。试试这个:

ALTER INDEX "PK_Mig1" RENAME TO "PK_XXX";