有一表TBL_SEND,UNID 是主键,我用SEQUENCE和触发器来做自动编号,问题是:
当我删除其中一个编号的时候,比如:我删除的是编号21,重新添加一条记录后,编号是从22开始,我的想法是能不能做个判断,判断UNID的现有的最小编号,然后添加的编号从最小编号加1开始,比如上面的重新添加记录后,编号从21开始。
请问各位怎么实现?

解决方案 »

  1.   

    oracle 的序列是自动增长的,如果想实现你说的功能,就自己写一个过程吧
      

  2.   

    这个逻辑上有问题的比如现在有序号1到10 你删除了4和8,那么新增加的纪录的UNID是取5还是9?
      

  3.   

    什么样的业务场景需要这种需求?
    实现起来很费劲,再者说把中间的序号补上没有任何意义。
    如现有记录:1,2,3,4,5 删除了2,4。如果查询时发现缺少2,4,起码给人以提示这两条记录已不存在。
    但如果补上,还是1,2,3,4,5,而2,4记录的实质已经发生了根本的改变,这就会给人造成一种误解,以为是按时间顺序记录的,其实2,4不知道是什么时候补上的。别人就会问了,我号码为2的记录怎么变成这个样子了?昨天不还是那样的吗?
    另外就是如果需要完全补上,那用序列就完全没有意义。就算用程序控制来补号也会成为一种鸡肋。
    还不如直接用rownum代表记录序号,如果是作ID用,也没必要中间补号。
      

  4.   

    楼主所需要的可能就是用max(UNID)+1可以解决了,无需楼上几位考虑得太复杂,呵呵,因为一般是可能用户新增数据时不正确而删除了,这样可能一般情况都是删除最大编号那笔记录的,这也可能是因为流水号有限,需要回收利用吧
      

  5.   

    可以实现,但是sequence就没有什么意义了!
      

  6.   

    通常情况下,使用SEQUENCE自动编号,只是为了数据操作方便,其本身没有实际意义,没有遇到过这种需求,帮你顶!~~~
      

  7.   

    to:bjt_(bjt) ( ) 
    对于正向验证方式,有没有索引速度都是一样的,因为验证时的消耗主要是要全表扫描是否存在一个不连续的id号索引对全表扫描没有意义