这可以标记为重复,但我在审稿时发现问题 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:无法创建独特的索引;找到重复的密钥
请帮帮我......
答案 0 :(得分:6)
当您尝试在包含重复值的一个或多个列上执行CREATE UNIQUE INDEX语句时,会发生这种情况。
两种解决方法(我知道):
从CREATE UNIQUE INDEX语句中删除UNIQUE关键字并重新运行该命令(即,如果值不必是唯一的)。
如果它们必须是唯一的,请删除导致重复值的无关记录,然后重新运行CREATE UNIQUE INDEX语句。