我正在尝试插入表中的某些行,但由于某些行是重复的,因此其中一个约束会出现“违反唯一约束”错误。
因此,我决定禁用约束,插入行,删除重复的行,最后再次启用约束。但是,即使在禁用约束后,我也会收到相同的错误消息。看起来禁用无效。 (我之前已经检查过禁用约束脚本,我很确定它有效)。
答案 0 :(得分:0)
我可以告诉你一个场景,也许是你的情况:
让我们创建表格和唯一约束:
create table AG_TW
(a NUMBER,
b VARCHAR2(5));
alter table AG_TW
add constraint AG_UK_AG_TW unique (A);
填写此表:
insert into ag_tw
select level, 'V'||level
from dual
connect by level <=10;
禁用约束并再次插入重复项:
alter table AG_TW
disable constraint AG_UK_AG_TW;
insert into ag_tw
select level, 'V'||level
from dual
connect by level <=10;
结果:插入了10行。
现在让我们放弃这个约束:
alter table AG_TW
drop constraint AG_UK_AG_TW cascade;
接下来,我在此索引上创建唯一索引并添加约束 :
create unique index AG_UK_AG_TW on AG_TW (a);
alter table AG_TW
add constraint AG_UK_AG_TW unique (A) using index AG_UK_AG_TW;
然后禁用此约束并尝试插入重复项:
alter table AG_TW
disable constraint AG_UK_AG_TW;
insert into ag_tw
select level, 'V'||level
from dual
connect by level <=10;
ORA-00001:违反了唯一约束
答案 1 :(得分:0)
如果您使用的是oracle 11g或更高版本,我有更好的解决方法。
您可以使用以下示例简单地忽略重复值,无需启用禁用任何约束。希望这会有所帮助。
insert /*+ ignore_row_on_dupkey_index(unique_cust,index_name) */
into
unique_cust
(select * from non_unique_cust);