ORA-01452:无法创建独特的索引;找到重复的密钥

时间:2014-08-26 11:25:42

标签: oracle10g unique-constraint duplicate-data

这可以标记为重复,但我在审稿时发现问题 Create Unqiue case-insensitive constraint on two varchar fields

我有一个表std_tbl,其中一列中有一些重复记录,如Column_One。

我在该列上创建了一个唯一约束

ALTER TABLE std_tbl            
ADD CONSTRAINT Unq_Column_One     
UNIQUE (Column_One) ENABLE NOVALIDATE;  

我使用了ENABLE NOVALIDATE,因为我想保留现有的重复记录并验证重复的未来记录。

但是在这里,constaint不会查找区分大小写的单词,比如Column_One的值是' abcd',它允许' abcd'和' ABCD'插入表格。

我希望此行为不区分大小写,以便在验证数据时不应查找大小写。为此我想出了这个解决方案。

CREATE UNIQUE INDEX Unq_Column_One_indx ON std_tbl (LOWER(Column_One));

但它给了我错误:

  

ORA-01452:无法创建独特的索引;找到重复的密钥

请帮帮我......

1 个答案:

答案 0 :(得分:6)

当您尝试在包含重复值的一个或多个列上执行CREATE UNIQUE INDEX语句时,会发生这种情况。

两种解决方法(我知道):

  1. 从CREATE UNIQUE INDEX语句中删除UNIQUE关键字并重新运行该命令(即,如果值不必是唯一的)。

  2. 如果它们必须是唯一的,请删除导致重复值的无关记录,然后重新运行CREATE UNIQUE INDEX语句。