代码之家  ›  专栏  ›  技术社区  ›  Doug

Oracle:序列mysequence.currval尚未在此会话中定义

  •  36
  • Doug  · 技术社区  · 17 年前

    这是什么意思?我怎样才能避开它?

    SELECT MySequence.CURRVAL FROM DUAL;
    

    结果:

    ORA-08002:序列mysequence.currval在此会话中尚未定义

    5 回复  |  直到 17 年前
        1
  •  47
  •   Tony Andrews    17 年前

    mysequence.currval返回从中的序列mysequence获取的最新值。 你的 会话,因此在会话中至少使用mysequence.nextval一次获得值之前不会定义会话。currval的目的是让您在代码中多次使用序列值,例如

    insert into parent (parent_id, ...) values (mysequence.NEXTVAL, ...);
    
    insert into child (parent_id, ...) values (mysequence.CURRVAL, ...);
    

    如果currval刚刚返回序列的最后一个值, 任何 会话,那么在上面的代码中它将是无用的,实际上可能导致数据损坏!

        2
  •  23
  •   Doug    17 年前

    结果是,你不能使用currval,除非你在你的会话中至少使用过一次nextvall。

        3
  •  12
  •   Community Mohan Dere    10 年前

    用这个

    select sequence_name, 
       to_char(min_value) min_value,
       to_char(max_value) max_value, 
       increment_by,
       cycle_flag, 
       order_flag, 
       cache_size, 
       to_char(Last_number) last_number
    from user_sequences
    where sequence_name='MYSEQUENCE'
    
        4
  •  3
  •   Rob van Wijk    17 年前

    道格

    真正的问题是,为什么在你的课程中没有使用nextvall时,你需要currval?您可以查看user/all/dba序列视图的最后一列,但是当您开始使用它时,请考虑并发问题。

    当做, Rob。

        5
  •  2
  •   falsetru    12 年前
    select * from user_sequences     where sequence_name='SEQ_V_WORKORDER_RECNO';
    

    在上面的查询中 SEQ_V_WORKORDER_RECNO 我的序列名替换为您的序列名

    推荐文章