1 1
2 2
3 3
4 5
5 7
6 8
7 9
8 10
9 21
10 22
11 25
12 28
13 29
测试表是这样,我要从5开始更新成4,5,6,7,8。。
select no
  from (select rownum no
          from TEST009 a, TEST009 b
         where rownum < (select max(no) from TEST009)
        minus
        select no from TEST009)
 where no > (select min(no) from TEST009)这个sql可以查询出缺哪些号怎么做可以把测试表更新成1,2,3,4,5,6,7,8。。

解决方案 »

  1.   

    要保持原先的顺序把断号紧凑化是吧,
    有个思路不知道适不适合你的实际情况,
    按照no排序之后,从1开始把所有行的no列全部重新赋值不就得了,就是更新的数据会更多,(可以判断一下,有断号才做)
    反正按你说的,出现了断号的话后面全要更新,看业务情况了,感觉上不差什么,
    这样就很好写了
      

  2.   

    直接用本表的rownum更新连续字段
    DECLARE 
      c_ROW T_USER%ROWTYPE;
      c_NO VARCHAR2(2);
    BEGIN
     FOR C_ROW IN (select ROWNUM,ID from T_USER order by ROWNUM ) LOOP
       EXECUTE IMMEDIATE 'update SCOTT.T_USER set id =:1WHERE ID=:2'
       USING C_ROW.ROWNUM,C_ROW.ID;
       END LOOP;
    END;