我写个一个jsp页面连接oracle数据库的,可以实现增加删除修改功能,我发现在当时用的时候自增自段很正常,但是过半天用的时候,它突然就给我来个自增20,然后从21开始算,真搞不懂了,
麻烦那位高手大哥哥帮帮忙,解决解决啊!!
小妹先谢谢了哦!!

解决方案 »

  1.   

    1: 1-20你已经用过了,所以ORACLE从21开始
    2: 其它进程用了1-20,所以ORACLE从21开始
      

  2.   

    我觉得你是---突然自增20,所以因该你写的语句有问题,你应该查询一下你的JSP代码
      

  3.   

    comcn(大XX) 的解释是对的
    也许是你自己做测试时用掉的。你可以再试
    在SQLPLUS中:
    select 序列名.nextval from dual;再开一个SQLPLUS:
    select 序列名.nextval from dual;这时你会发现序列的值增加了2
      

  4.   

    select seq.currvalue from dual;
    查看现在当前值是多少.
      

  5.   

    感觉应该是在Java处理中出现了问题,因为我也曾遇到过类似的情况。
      

  6.   

    是这样的, Oracle的序列在创建的时候有一个cache值是20,这样的话如果在使用的过程中重起过数据库的话,下一次就会从下一个20开始计数了!
    还有一种常见的情况,就是序列对于每个session(可以看成是一个连接)是相互不影响的,如果低一个连接里使用序列从1开始,同时第二个连接也在使用序列就会从21开始了,第一个连接在使用到20以后就会跳到41,如果41杯第三个连接使用了就会跳到61,等等这是cache为20的情况
    如果不信,可以同时打开两个sqlplus试试!
      

  7.   

    另外,select seq.currvalue from dual;
    看到的只是当前session(连接)中的序列的值!他可能不是序列对象当前的最大值!
    就是说在每个session中他的值可能都是不同的!
      

  8.   

    你讲的很正确哦,跟我的实际情况一模一样哦,真高手哦!那我想用序列并且克服这个困难怎么办啊??改cache的值可以吗??对其他还有影响啊??太谢谢了啊!
      

  9.   

    如果访问量不大可以把cache改成1试试,这样会对效率有些影响!
      

  10.   

    hqskoala(从兴趣到工作)  已经给出标答了,楼主可以参考下。
      

  11.   

    哪个影响效率就不考虑修改cache值了,我就想用个自增序列吗!!其实也没什么的,但是它不老老实实自增,有时给我来个20,我就不乐意了,是吧??呵呵~~
      

  12.   

    sharedpool刷新引起的执行一下alter system flush shared_pool就可以重现问题
      

  13.   

    简单嘛,删除了sequence,重建就可以了,爱从多少开始就从多少开始!
    drop sequence q_test
    CREATE SEQUENCE  q_test start with 0;
      

  14.   

    hqskoala(从兴趣到工作) 说得没错,以前我遇到过,还来改成自己写函数实现。