创建的语句没什么问题。
出现你的问题的原因可能是:
1、别人用了你的sequence
2、出现了非常规的down机
3、你的程序的循环写的有问题。

解决方案 »

  1.   

    楼上说的对,出现GAP的原因很多:
    1 sequence可以被多表共享,其他表用了6-20
    2 系统崩溃时cache中的sequence数据丢失,会出现GAP
    3 当rollback时sequence不会rollback,会出现gap
    4 也很可能是你自己“查数”没查对,重新检查一下sql
    不知您能否受到启发。
      

  2.   

    我是一个表见了一个sequence,不会出现多表共享的问题。因为这个表只有我自己用。循环怎么会出问题?第一天的提交很好,顺序都是正确的,第二天就会变了。
      

  3.   

    排序值和循环值应该不会导致你的问题
    不经义的一句话如:select ***.nextval from dual;
    就会导致序列增加。
    能把sql贴出来吗?
      

  4.   

    我没有用过select **.nextval from dual,但是用过select * from dual
    不知道这样有没有影响。
      

  5.   

    select * from dual没有影响。
    这个问题应该和cache没关系
    cache默认为20,就是存20个sequence数在cache中,
    如果cache为0则系统会从内存中取数。
      

  6.   

    将CACHE SIZE设置为0就ok了
      

  7.   

    我想设置 CACHE SIZE属性于楼主的问题没有什么关系吧。如果不用CACHE的话,反而还降低了效率
    我想楼主可以重新建一个表及序列再进行测试一下看,注意你所做的每一步操作,看一看是不是会有出问题的地方呢?
      

  8.   

    还是和cache有关系。没有cache就没事了。
      

  9.   

    我也遇到过这样的问题,没有cache就没事了。为什么呢,请哪位分析一下。
      

  10.   

    我认为还是不要用系统中的序列,而采用“自定义“的序列号生成方式,这样可以比较灵活,而且有多种形式。如想要自定义序列号生成方式,请留MAIL。
      

  11.   

    sepuence如果设为cache20,将会在内存中存储下20个数据,如果此时关掉数据库,这20个
    序列数将丢失,下次启动数据库会从第21个开始,如果设为nocache,就不会有这种情况。
      

  12.   

    你可以建立一个sequence有cache的(20)
    然后select * from user_sequences;
        select 其中一个.nextval from dual;
        select 其中一个.currval from dual;
    你会发现当前值为1,而LAST_NUMBER为21
      

  13.   

    你中间可能使用了myseq.nextval做查询,把中间那段给空掉了