3

使用 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

如果我分别尝试这些语句,那么它会给我我想要的东西,但我对如何在一个查询中做到这一点感到困惑。

4

2 回答 2

3

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

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

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

于 2014-12-19T22:34:10.610 回答
0

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

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

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

于 2014-11-19T10:53:40.570 回答