在PL/SQL中执行SELECT SEQ_GC.CURRVAL FROM DUAL;报序列尚未在会话中定义的错误,序列是存在的,什么原因?

解决方案 »

  1.   

    在同一session里,要先执行
    SELECT SEQ_GC.NEXTVAL FROM DUAL;然后再执行
    SELECT SEQ_GC.CURRVAL FROM DUAL;
      

  2.   

    刚创建你序列的时候,第一次用序列前,要先用nextval,以后才能用currval
      

  3.   

    在同一个session中如果没有取nextval的话是取不到currval的scott@YPCOST> create sequence testseq start with 1 increment by 1;序列已创建。scott@YPCOST> select testseq.currval from dual;
    select testseq.currval from dual
           *
    第 1 行出现错误:
    ORA-08002: 序列 TESTSEQ.CURRVAL 尚未在此会话中定义
    scott@YPCOST> select testseq.nextval from dual;   NEXTVAL
    ----------
             1scott@YPCOST> select testseq.currval from dual;   CURRVAL
    ----------
             1
      

  4.   

    这个在PL/SQL中是会存在该问题,是ORACLE PL/SQL的一个问题。
    先执行SELECT SEQ_GC.NEXTVAL FROM DUAL;
    然后再执行SELECT SEQ_GC.CURRVAL FROM DUAL;
      

  5.   

    nextval是去sequence取一个值,currval是当前取得的值.
      

  6.   

     1 先执行 取值
    SELECT SEQ_GC.nextval FROM DUAL2 在执行获取当前的值
    SELECT SEQ_GC.CURRVAL FROM DUAL古语有云 先有女人 才能有后代
      

  7.   

    看来csdn 还是有吸引力 以前都都回来了
      

  8.   

    先有nextval, 去生成值,然后才能取当前的生成值。
    不过,oracle这种方式挺让人不爽,如果没有生成值,可以返回-1之类的,可以让用户有个选择。