【问题标题】:How to select a list of 100 next sequence values from a database如何从数据库中选择 100 个下一个序列值的列表
【发布时间】:2011-09-17 08:47:36
【问题描述】:
select nextval ('mySchema.mySequence')

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

如何从 SQL 中的序列中获取接下来的 N 个值?

我当前的设置使用 postgreSQL 和 Hibernate 的本机 SQL 查询,但任何解决方案都值得赞赏。

【问题讨论】:

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

标签: sql database hibernate postgresql sequence


【解决方案1】:

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

【讨论】:

  • 我永远不知道我一次需要多少个值。以 100 为例。所以这个解决方案并不适用。
  • @iliaden:嗯,你应该有一些上限。如果您在 Hibernate 中处理大量数据,您应该将其分批拆分,例如 5000 条记录/对象限制。在这种情况下,INCREMENT BY 5000 就可以了。
【解决方案2】:

这里是针对相关问题提供的答案的链接。
How to select multiple rows filled with constants?

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

Postgres 的解决方案是:

SELECT  l
FROM    generate_series(1, $n) l

在你的情况下,而不是 select l 你会 select nextval('mySchema.mySequence')

【讨论】:

  • 这是一种有趣的方法,但我不太清楚如何实现 1) 从序列中读取 2) 将序列值设置为最后生成的值。
  • stackoverflow.com/questions/8292199/… 可能是如何在 oracle 中做到这一点...
【解决方案3】:

请使用此 SQL 查询。 注意:它仅适用于 Oracle。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 2015-07-02
    • 1970-01-01
    相关资源
    最近更新 更多