我正在尝试使用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(全部插入)(而不是从源表复制到目标表) 我不想为每一行使用插入查询。 这是我正在尝试的某种研究方式。
答案 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
快。