我正在使用oracle数据库并遇到两个id_poduct.nextval创建为错误的问题:ORA-00001: unique constraint (SYSTEM.SYS_C004166) violated
这是一把钥匙。要使用all是必需的。我可以在声明中使用2 .nextval吗?
insert all
into sale_product values (id_product.nextval, id.currval, 'hello', 123, 1)
into sale_product values (id_product.nextval, id.currval, 'hi', 123, 1)
select * from dual;
答案 0 :(得分:3)
insert into sale_product
select id_product.nextval, id.currval, a, b, c
from
(
select 'hello' a, 123 b, 1 c from dual union all
select 'hi' a, 123 b, 1 c from dual
);
这不使用insert all
语法,但如果只插入同一个表,它的工作方式相同。
答案 1 :(得分:2)
id_product.NEXTVAL
INSERT中first
的值与second
INSERT相同,因此您将获得unique constraint
违规。如果删除约束并执行插入,您会注意到重复的值!
唯一的方法是按顺序执行两个批量INSERTS或者有两个不同范围的单独序列,后者需要大量的编码和检查。
create table temp(id number ,id2 number);
insert all
into temp values (supplier_seq.nextval, supplier_seq.currval)
into temp values (supplier_seq.nextval, supplier_seq.currval)
select * from dual;
ID ID2
---------- ----------
2 2
2 2
<强> Refrence 强> multitable insert语句的子查询不能使用序列 http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9014.htm#i2080134