解决Oracle创建唯一索引遇到的问题(ORA-01452: 无法 CREATE UNIQUE INDEX; 找到重复的关键字)

此问题因数据库已经是有数据的,创建唯一索引的那一列有重复的数据,即数据库中的已存在数据不符合要创建索引的条件,导致创建索引的时候会出现ORA-01452找到重复关键字的错误。

解决:

例 :表中有两个字段 id,year,创建唯一联合索引,出现上面的错误,可通过下面的语句删除重复的记录并在重复记录中只保留最小rowid的记录.

DELETE FROM 表名 A WHERE (A.ID,A.YEAR) IN (SELECT ID,YEAR FROM 表名 GROUP BY ID,YEAR HAVING COUNT(*) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM 表名 GROUP BY ID,YEAR HAVING COUNT(*)>1);

commit;

执行完上述语句后,再次执行创建唯一索引的语句就不会报错了.

你可能感兴趣的:(oracle)