novalidate,错误ora-02299

时间:2013-06-18 08:03:34

标签: oracle unique-constraint

有人可以帮我吗?

id | Name
--------
1  | aaa
2  | bbb
3  | aaa

>alter table arc add CONSTRAINT uk_arc UNIQUE (NAME) novalidate
 error :ora-02299: cannot validate( .uk_arc ) - duplicate keys found

我使用novalidate忽略旧副本并开始重新验证。

1 个答案:

答案 0 :(得分:9)

如果我找到了正确的答案,您希望Oracle忽略旧的重复值并仅在满足约束时允许新值。返回错误是因为当您添加UNIQUE约束时,Oracle会在列上创建唯一索引来检查值,但是您的表已经有重复值,因此它会失败。我首先创建非唯一索引,然后添加约束,以便它使用您现有的非唯一索引,而不是自动创建失败的唯一索引:

create index arc_ix on arc (name);

alter table arc add constraint arc_uq unique (name) enable novalidate;