1.假设在在sqlplus先创建了一个序列
create sequence myseq
start with 0
increment by 1
minvalue 0
maxvalue 10000
nocycle
nocache;2.激活序列并取其初值
select myseq.nextval from dual;
select myseq.currval from dual;
得到当前序列值为03.然后结束当前用户与数据库的连接
disc
4.问重新登录后如何查询序列myseq的当前值?
当前myseq的值应该为0,但现在用myseq.currval是无法查出的,
直接用会抛出” ORA-08002:序列 MYSEQ.CURRVAL 尚未在此会话中定义“,
如果调用myseq.nextval 则会使得序列的值加1,即序列的当前值会被改变,不再是0。
求重新登陆后可查得指定序列的当前值的方法

解决方案 »

  1.   

    这个不是正常的做法么。。session级别的值,一个session以后当然就取不到上一个session的值了,因为已经被用掉了。。
    这个就好比一个人进入房间后坐了一个座位,你让另一个人说他刚刚坐哪了是一个道理。。
      

  2.   

    如果非要查询的话,有一个窍门,将cache设置为nocache即设置为0.
    然后通过user_sequences查询你想要的就行了。。
      

  3.   

    查询user_sequences,将last_number-1也许能满足你,不过必须nocache,不知道你能不能接受
      

  4.   

    查询user_sequences,将last_number-1也许能满足你,不过必须nocache,不知道你能不能接受
    谢谢你的解答,如果必须要nochche这没法解决根本问题。
      

  5.   

    打错字了是nocache。继续求解答
      

  6.   

    先取下一个值会使得当前序列的实际值被改变,还是解决不了我提的问题啊。我明白你的意思,你想获取序列的最大值.  是这个意思吗?本次session怎么获取上一个session的值呢? 变通一下, 先nextval   然后currval - 1  如果序列自增为1的话,自增为几就减几
    SELECT myseq.nextval  FROM dual;
    SELECT myseq.currval -1   FROM dual
      

  7.   

    何不从oracle视图里面去取呢?
    select last_number-1
    from user_sequences
    where sequence_name=upper('myseq');