Oracle SQL:插入重复键(禁用/启用约束)

时间:2016-03-11 13:54:17

标签: sql oracle sql-insert unique-constraint

我正在尝试插入表中的某些行,但由于某些行是重复的,因此其中一个约束会出现“违反唯一约束”错误。

因此,我决定禁用约束,插入行,删除重复的行,最后再次启用约束。但是,即使在禁用约束后,我也会收到相同的错误消息。看起来禁用无效。 (我之前已经检查过禁用约束脚本,我很确定它有效)。

2 个答案:

答案 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);