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