在多行上插入单个序列值

时间:2011-01-31 20:26:18

标签: sql oracle oracle11g sequences

我正在尝试将多个记录插入表中,但是对每个记录使用相同的序列值。

这类似于:How can I insert multiple rows into oracle with a sequence value?但是给出的答案会插入多个不同的序列号,并且我希望多个rec的序列号相同。

create table test1  ( 
  col_a number, 
  col_b number
);
commit;

create sequence test_seq increment by 1 start with 2 minvalue 1 nocycle nocache noorder;
commit;

insert into test1 (col_a, col_b) 
select a.object_id, test_seq.nextval from (
  select object_id from all_objects where rownum < 5
) a;
commit;

上面的问题是它检索并插入了多个(不同的)“test_seq.nextval”值,我想为每一行插入相同的值。

这是否可以直接sql而不诉诸触发器(或多个sql语句)?相关问题的答案之一暗示可能不是,但我不清楚。

感谢。
如果有帮助,我正在使用Oracle 11g。

1 个答案:

答案 0 :(得分:5)

使用currval代替nextval

select test_seq.nextval from dual;

insert into test1 (col_a, col_b)
select a.object_id, test_seq.currval from (
  select object_id from all_objects where rownum < 5
  ) a;

我知道在没有两个语句的情况下没有方法可以做到这一点,第一个是递增序列(因此可以通过currval选择它),第二个是使用currval。