面试题:
update table set tname=10 where id=2其中,id=2有10行数据,执行update会把10条记录的tname都修改为10,
现在想把10行记录中id=2的tname字段修改为1,2,3,4,5,6,7,8,9,10
用update语句修改?
在线等高人指教,谢谢!

解决方案 »

  1.   

    建一个sequence,然后
    update table set tname=seq.nextval where id=2;
      

  2.   

    用视图来做
    update(
      select t.*
       from  t where id=2)
       set tname=rownum
      

  3.   

    补充一种方法
    update tt a set tname=(select rn from
    (select rowid rd,
      row_number()over(partition by id order by rownum)rn
    from tt)
    where rd=a.rowid)
    where id=2条件里id=2可以随便更换成id in(1,2,3,4)等等,也可以去掉
    写个过程用游标实现也可以,不过麻烦
      

  4.   

    CREATE SEQUENCE id_sequence
    START WITH 1
    INCREMENT BY 1;
    update table set t_name=id_sequence.NEXTVAL where id=2;
      

  5.   

    update table set tname=rownum where id=2;
      

  6.   

    还是感觉二楼的方法比较合适,巧妙利用rownum,建序列就有点麻烦了,以后用不到就得删除
      

  7.   

    利用rownum 的方法比较强大
      

  8.   

    利用rownum 的方法比较强大