oracle – ORA-00955“名称已被现有对象使用”

前端之家收集整理的这篇文章主要介绍了oracle – ORA-00955“名称已被现有对象使用”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要修改现有的PK.因此我放弃重新创建它.
ALTER TABLE B DROP CONSTRAINT PK_B;
ALTER TABLE B ADD CONSTRAINT PK_B PRIMARY KEY ("TYP","NR","HH","QUART");
@H_404_3@不幸的是,最后一个声明会给我一个错误ORA-00955

@H_404_3@如果我创建PK约束,就像它最初定义的那样:

ALTER TABLE B ADD CONSTRAINT PK_B PRIMARY KEY ("TYP","HH");
@H_404_3@一切正常.

也许有一个与PRIMARY KEY CONSTRAINT相关联的INDEX,它也被命名为PK_B. @H_404_3@您可以将其检查为:

SELECT * FROM USER_INDEXES WHERE TABLE_NAME='<table_name>';
@H_404_3@如果这是真的,那么:

ALTER INDEX "PK_B" RENAME TO "PK_XYZ";
@H_404_3@更新:关于ALTER INDEX声明,Justin在评论中提到的几个要点

@H_404_3@Oracle隐式创建一个UNIQUE索引来支持PRIMARY KEY CONSTRAINT.因为,索引与主键的名称相同,并且现在主键被修改,所以最好根据旧主键的定义再次删除并重新创建索引.

@H_404_3@我的结论:

@H_404_3@>主键约束通过唯一索引强制执行.
>如果Oracle已经找到索引 – 唯一或非唯一 – 它会使用它
对于主键.
>如果索引最初创建为非唯一,则它将继续
显示为非唯一,但实际上它将是一个唯一索引.

@H_404_3@Arup:Primary Keys Guarantee Uniqueness? Think Again.也是一个很好的演示,并且在其他方​​面也非常详细

原文链接:https://www.f2er.com/oracle/205085.html

猜你在找的Oracle相关文章