在单个查询中检索CURRVAL和NEXTVAL

时间:2014-06-21 20:15:47

标签: sql oracle nextval

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

如果我单独尝试这些语句,那么它会给我我想要的东西,但我在一个查询中是如何做到这一点的。

2 个答案:

答案 0 :(得分:3)

好吧,在搜索了Oracle的文档之后,我猜测我的陈述是正确的。根据{{​​3}}:

  

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

对我而言,Oracle对我这么做是没有意义的,但我会接受他们的话。

答案 1 :(得分:0)

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

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

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