嗨,我正在插入一些日期做我的桌子。由于某些原因,我不得不禁用约束。约束与索引相关联。我使用了以下代码行:
ALTER TABLE my_table DISABLE CONSTRAINT "my_constraint" drop index
并且my_constraint处于禁用状态。不,我想启用此约束,但是在调用此行之后:
ALTER TABLE my_table ENABLE NOVALIDATE CONSTRAINT "my_constraint";\
我收到一个错误:
ORA-02299:无法验证(USER.my_constraint)-找到重复的密钥
您不能具有带有唯一索引的非唯一值。但是,您可以具有带有由非唯一索引强制执行的唯一约束的非唯一值。即使您最初创建了一个非唯一索引,除非您在本节中提供了更多详细信息,否则drop indexandenable语法将尝试重新创建一个唯一索引using index。
drop index
enable
using index
例如:
SQL> create table my_table(my_column number, 2 constraint my_constraint unique (my_column)); Table created. SQL> alter table my_table disable constraint my_constraint drop index; Table altered. SQL> insert into my_table select 1 from dual union all select 1 from dual; 2 rows created. SQL> alter table my_table enable novalidate constraint my_constraint; alter table my_table enable novalidate constraint my_constraint * ERROR at line 1: ORA-02299: cannot validate (USER.MY_CONSTRAINT) - duplicate keys found SQL> alter table my_table enable novalidate constraint my_constraint 2 using index (create index my_index on my_table(my_column)); Table altered. SQL> --The constraint is enforced, even though other rows violate it. SQL> insert into my_table values(1); insert into my_table values(1) * ERROR at line 1: ORA-00001: unique constraint (USER.MY_CONSTRAINT) violated