我正在尝试将多个记录插入表中,但是对每个记录使用相同的序列值。
这类似于: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。
答案 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。