许多台客户端机器,通过前台程序,以ORACLE的相同的用户名/密码访问数据库,都在做select sequenceA.nextval,再select sequenceA.curval,请问各客户端取得的当前序列号是刚才自己的nexval还是数据库中最后一个客户端插入的值呢?

解决方案 »

  1.   

    nextval是某个序列的下一个值,它是一个永远增大(EVERINCREASING NUMBER)的数字
    它的值不是某个客户端插入的,当你取nextval的时候,它会加1,
    和表一样,sequence也是一个数据库对象
      

  2.   

    我想问如果A客户端 select sequence.nextval ,比如值是10,这时另一个客户端也select sequence.nextval,比如值是11,如果这时A客户端再select sequence.curval,那么返回的是10还是11啊? 
      我自己做过试验,应返回是10,但怎么看网上有的贴子说应返回最后一回的nextval (11),我就又不敢确定了.
      

  3.   

    这个值只会月来月大,按照你的说的,是12,我是不太主张用这个自增的序列的,因为一个表用了序列,会严重影响表的INSERT的速度,不太明白为什么很多开发的都喜欢用这个自增的ID
    我喜欢用表的自然主键,页容易理解SQL> create sequence aaa;Sequence created.SQL> select aaa.nextval from dual;   NEXTVAL
    ----------
             1SQL> /   NEXTVAL
    ----------
             2SQL> /   NEXTVAL
    ----------
             3SQL> 
      

  4.   

    currval是本会话最后一次nextval的值,如果会话没有执行过nextval,currval是出错的。