如何从数据库中选择100个下一个序列值的列表

3
select nextval ('mySchema.mySequence')

这个命令将返回序列的下一个值。

如何在SQL中获取序列的下N个值?

我的当前设置使用postgreSQL和Hibernate的本地SQL查询,但任何解决方案都可以接受。


1
什么数据库产品和版本? - Thomas
postgreSQL。使用Hibernate进行查询,其中我输入本地SQL代码。理想情况下,这应该是独立于数据库的。 - iliaden
3
首先,您应该在问题中添加Hibernate标签。其次,实现真正的数据库独立几乎是不可能的。例如,序列的实现(或缺乏实现)在各种数据库产品中差异很大。 - Thomas
1
@j.w.r - 你发布了可工作的解决方案链接...有没有办法将评论标记为正确的解决方案?SELECT nextval('mySchema.mySequence') FROM generate_series(1, 100) n - iliaden
显示剩余2条评论
3个回答

3

您可以通过 INCREMENT BY 100 定义您的序列,然后在使用 SQL 获取下一个值 N 后,在您的 Java 代码中使用值 N + 1、N + 2、...、N + 99。


我从来不知道一次需要多少个值。100只是一个例子,所以这个解决方案并不适用。 - iliaden
@iliaden:嗯,你应该有一些上限。如果你在Hibernate中处理大量数据,你应该将它分批处理,比如每5000条记录/对象为一组。在这种情况下,INCREMENT BY 5000 就可以很好地工作了。 - Olaf

3

这里是关于相关问题提供的答案链接。
如何选择填充有常量的多行?

Postgres、Oracle和SQL Server的解决方案都不同。

Postgres的解决方案是:

SELECT  l
FROM    generate_series(1, $n) l

在您的情况下,您需要使用 select nextval('mySchema.mySequence') 而不是 select l

这是一个有趣的方法,但我还无法弄清如何使其 1)从序列中读取 2)将序列值设置为最后生成的值。 - iliaden
可能在Oracle中可以这样查询多个序列的nextval... - rogerdpack

2

请使用以下SQL查询语句。 注意: 该语句仅适用于Oracle。

select your_sequence_name.nextval from dual connect by level <= 100

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接