在一个语句中从序列中查询几个NEXTVAL

时间:2011-11-28 06:25:33

标签: sql oracle

基本上,我需要从序列中查询大约一千个NEXTVAL。我可以在一个循环中查询它们,或者我可以通过一个带有reeeeeally大表的连接来查询它们。

有没有更少的hacky方式?

UPD。 基本上,我有一个对象操作的时间表。每个对象都有一个生成的UUID或来自数据库的ID。在计算出最佳计划后,我需要将其写入DB,但表中的每个ID都来自一个序列。所以我需要查询该序列中的一些ID。问题是循环查询很慢,因为数据库离我很远,而且我不能在循环中执行数十个查询时放松几秒钟。所以我需要在一个查询中查询所有这些新ID。

4 个答案:

答案 0 :(得分:34)

您可以使用:

select your_sequence.nextval
from (
   select level 
   from dual 
   connect by level < 1000
);

答案 1 :(得分:15)

取决于你想要用它们做什么。

如果将它们插入表中,则可以在插入查询中取消seq.nexval。 (如下所述:How can I insert multiple rows into oracle with a sequence value?

如果在循环中使用它们,可以在该循环中获取它们。

你想用它们做什么?

据我所知,您无法从序列中获取多个值。

<强>更新 a_horse_with_no_name的aswer可以这样改进:

select your_sequence.nextval
from dual 
connect by level < 1000

:)

答案 2 :(得分:0)

我的(H2)单元测试数据库不支持“ connect by”,因此我不得不提出其他建议:

    with temp_id_table (lvl) as 
       (select 1 as lvl from dual 
        union all 
        select lvl+1 
          from temp_id_table 
          where lvl < 1000) 
    select sequence_name.nextval 
    from temp_id_table;

答案 3 :(得分:-4)

select sequence_name.nextval
from dual
connect by level < number of values you want to print;