全部插入导致违反主键的唯一约束

时间:2019-05-21 07:48:34

标签: sql oracle sql-insert

我正在尝试使用INSERT ALL在我的表中插入行。

INSERT ALL
INTO TABLE(C2, C3) VALUES ("Hello","World")
...
...
SELECT 1 from DUAL;

表的C1列具有主键约束,其值设置为我创建的序列的默认下一个值(此操作是在创建表时完成的),

C1 NUMBER(10,0) DEFAULT SEQUENCE1.NEXTVAL NOT NULL,
.
.
CONSTRAINT Constraint1 PRIMARY KEY (C1)

在运行insert all statemnt时出现错误

  

ORA-00001:违反了唯一约束(databaseName.Constraint1)

会发生这种情况吗,因为所有插入都进行了一些同步插入并且顺序没有增加吗? 我正在尝试仅使用Insert Insert(全部插入)(而不是从源表复制到目标表) 我不想为每一行使用插入查询。 这是我正在尝试的某种研究方式。

1 个答案:

答案 0 :(得分:1)

是的,INSERT ALL仅为所有插入的行生成一个序列值,从而导致约束冲突。将INSERT ALL替换为多个SELECT ... FROM DUAL UNION ALL子查询,序列将按预期工作。

此代码将为每一行调用NEXTVAL

insert into table1(c2, c3)
select 'Hello', 'World' from dual union all
select 'Hello', 'World' from dual;

作为奖励,UNION ALL技巧的运行速度往往比INSERT ALL快。