基本上,我需要从序列中查询大约一千个NEXTVAL。我可以在一个循环中查询它们,或者我可以通过一个带有reeeeeally大表的连接来查询它们。
有没有更少的hacky方式?
UPD。 基本上,我有一个对象操作的时间表。每个对象都有一个生成的UUID或来自数据库的ID。在计算出最佳计划后,我需要将其写入DB,但表中的每个ID都来自一个序列。所以我需要查询该序列中的一些ID。问题是循环查询很慢,因为数据库离我很远,而且我不能在循环中执行数十个查询时放松几秒钟。所以我需要在一个查询中查询所有这些新ID。
答案 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;