使用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
如果我单独尝试这些语句,那么它会给我我想要的东西,但我在一个查询中是如何做到这一点的。
答案 0 :(得分:3)
好吧,在搜索了Oracle的文档之后,我猜测我的陈述是正确的。根据{{3}}:
如果一个语句包含对CURRVAL和NEXTVAL的引用,Oracle会递增序列并为CURRVAL和NEXTVAL返回相同的值,而不管它们在语句中的顺序如何。
对我而言,Oracle对我这么做是没有意义的,但我会接受他们的话。
答案 1 :(得分:0)
我遇到了同样的问题。经过大量的研究,我们做了两个不同的查询。
第一个检查当前值,第二个生成一个新值。
似乎数据库注意到SELECT语句中的'nextval'并立即替换'old'当前值。