2

我正在使用 oracle 数据库并面临两个 id_poduct.nextval 创建为错误的问题:ORA-00001: unique constraint (SYSTEM.SYS_C004166) violated

它是一个主键。使用所有是一个要求。我可以在语句中使用 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;
4

2 回答 2

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语法,但如果您只插入同一个表,它的工作方式相同。

于 2012-06-09T22:04:27.420 回答
2

INSERT 中的值id_product.NEXTVALfirstINSERT 相同second,因此您将得到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

参考 多表插入语句 的子查询不能使用序列 http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9014.htm#i2080134

于 2012-06-08T16:23:37.200 回答