就是我建立了一个序列, 
然后insert的时候使用这个序列, 可是insert失败的时候, 这个序列还是会自己增加。比如我让序列从1开始, 然后我insert失败了3次, 第四次成功的时候, 序列号直接就是4了。
123被跳过去了。这个问题怎么解决??

解决方案 »

  1.   

    这就是oracle db sequence的缺点
    如果你设置了sequence的cache的,那可能中断的数据还要多
      

  2.   

    序列的特点就是自增 虽然你的insert失败了 但是取序列的操作成功了啊
    取序列的nextval不和你的sql是同一个事务 没办法控制如果你想让某个字段不间断的递增 可以用max(本字段)+1来进行插入啊
      

  3.   

    sequece 执行一次其值加1 ,虽然sql insert 异常但是sequece 执行啦
      

  4.   

    假设有表A 其中有三个列 id name value id希望是自增的,从一开始
    你原来写的insert语句是 insert into a (id,name,value)select 序列.nextval,'name','value' from dual
    现在可以改成 insert into a (id,name,value)select max(id),'name','value' from dual
    不过需要注意的是 这样的话 一次只能插入一条记录 否则 就会导致id重复 也就是8楼所说的问题
      

  5.   

    这个问题我的处理方法是用rownum+1来代替sequence
      

  6.   

    我觉得序列的这个特性非常合理,如果你insert语句失败的次数少,跳过几个就不是问题,如果insert语句失败的次数量大,那么你的程序或者就应该考虑修改了