你要先使用一次NEXTVAL,才能使用CURRVAL

解决方案 »

  1.   

    先这样
    select s_tmp_updateuserpostrank.NEXTVAL  into v_IdentityCount from dual
      

  2.   

    那我怎么取上一次的nextval值?那个值我有用,在向另一个表插入数据时要用到
      

  3.   

    而且序列怎么这么怪?在Oracle Enterprise Manager Console里看到S_TMP_UPDATEUSERPOSTRANK上一个数目是41,我在pl/sql developer里用select s_tmp_updateuserpostrank.NEXTVAL from dual看到的是24,怎么不一样?
      

  4.   

    你第一次执行NEXTVAL得到的是第一个起始值,这个时候执行CURRVAL得到的还是刚才的值.
    不可能不一样的:)
      

  5.   

    这个看你在创建序列是用的cache有多大,缺省是20。
    oracle是多用户多任务的,所以在每一个session里某些东西是相互独立的,比如序列的currval属性其他session对序列的使用不会对本session产生影响,因此在一个session中至少要使用一次NEXTVAL属性才能用它
      

  6.   

    比如说某个session里使用了序列a.NEXTVAL(21),之后其他session也使用了a.NEXTVAL(41),这时在原来的session里使用a.currval仍为21,因为序列a的cache为20,所以第二个session使用a时自动跳到41把21-40留给先前的session
      

  7.   

    select s_tmp_updateuserpostrank.NEXTVAL  from dual删除开始那个重建
    -- Create sequence 
    create sequence s_tmp_updateuserpostrank
    minvalue 1
    maxvalue 9999999
    start with 1
    increment by 1
    cache 20
    cycle;
      

  8.   

    谢谢大家,现在有点概念了。序列的cache是原来这个意思,我还以为是和序列的存取速度有关。我设置cache缺省值为20,像 hqskoala(大晟) ( ) 说的情况,如果某个session使用序列时超过了20,那不是和另一个session的序列重复、冲突了(假设另一个session由41开始,预留了21-40给前一个session)?