oracle update order by 问题

update a a set a.盒内号=rownum where a.盒号='C-410727-0020' order by a.登记号 asc;
怎么实现以上的意思 跪求

可以使用游标来处理。

begin
for c in (select * from (select rownum,a.* from a a order by a.登记号 asc))
loop
update a a set a.盒内号 = c.rownum 
where 登记号=c.登记号 and c.盒号='C-410727-0020';
end loop;
end;

追问

这个表里有许多C-410727-0020这样的盒号 ,一个300个 ,我想把他按照登记号从1排到300,你上边说的这个是直接更新成rownum了,得先排序 然后再弄,游标我不太清楚怎么弄。。

追答

就是这样处理的呀~

这条语句就是先按登记号来进行排序,按你说的那个需求,可以把盒号加进去,如:

select rownum,a.* from a a where a.盒号='C-410727-0020' order by a.登记号 asc

然后呢,以这个表为依据,用游标把这个表的记录一条一条的取出来。

for c in (select * from (select rownum,a.* from a a order by a.登记号 asc))

最后使用LOOP循环来进行一条一条的来修改数据。

loop
update a a set a.盒内号 = c.rownum 
where 登记号=c.登记号 and c.盒号='C-410727-0020';
end loop;

这就是整个流程了!

游标不太清楚的话,你可以直接把语句复制进去执行就行了,如是结果不对,直接rollback回去也是可以的。

温馨提示:答案为网友推荐,仅供参考
相似回答