2

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

这类似于:如何使用序列值将多行插入到 oracle 中?但是给出的答案插入了多个不同的序列号,我希望多个记录使用相同的序列号。

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。

4

1 回答 1

6

使用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。

于 2011-01-31T20:31:47.813 回答