【问题标题】:Retrieving CURRVAL and NEXTVAL in a single query在单个查询中检索 CURRVAL 和 NEXTVAL
【发布时间】:2014-06-21 20:15:47
【问题描述】:

使用 SQLPlus,我生成了以下序列:

CREATE SEQUENCE pubnum_seq
START WITH 7
    INCREMENT BY 2
MAXVALUE 1000;

我想要做的是编写一个单一的查询来检索序列中的 NEXTVAL 和 CURRVAL。看起来它应该很简单。我试过以下说法:

SELECT pubnum_seq.currval, pubnum_seq.nextval
FROM dual;

但是,这会为两者检索相同的值。

CURRVAL - 7
NEXTVAL - 7

如果我分别尝试这些语句,那么它会给我我想要的,但我不知道如何在一个查询中做到这一点。

【问题讨论】:

  • 您可以通过编辑来回答您的问题(甚至接受)。

标签: sql oracle nextval


【解决方案1】:

好吧,在搜索了 Oracle 的文档之后,我猜我的陈述毕竟是正确的。根据this docs page

如果语句包含对 CURRVAL 和 NEXTVAL 的引用,Oracle 会递增序列并为 CURRVAL 和 NEXTVAL 返回相同的值,而不管它们在语句中的顺序如何。

Oracle 这样做对我来说不太合理,但我会相信他们的话。

【讨论】:

  • 我将“答案”移到了一个答案帖子中,并且没有提出问题。
  • 哇,这是 Oracle 糟糕的设计。刚刚遇到这个,但就我而言,我需要CurrValNextVal 之后,所以这对我来说不是问题。但仍然......糟糕的设计。
【解决方案2】:

我遇到了同样的问题。经过大量研究,我们做了两个独立的查询。

第一个检查当前值,第二个生成一个新值。

似乎数据库注意到 SELECT 语句中的“nextval”并立即替换“旧”当前值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-11
    • 2021-06-11
    • 2017-06-08
    • 2012-06-04
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多