请教大家一个问题,小弟有一张原始表。数据大致如下:SQL> select * from a
  2  /        ID NAME                 UFPDA
---------- -------------------- ---------
         1 赵5                  60
         2 张1                  80
         2 张1                  80
         2 张1                  80
         2 张1                  80
         2 张1                  80
         2 张1                  80
小弟希望更新一下ID,使之成为自然数排列,用如下语句更新时,提示:无效的 ROWID
SQL> l
  1  declare
  2  aa a%rowtype;
  3  iid int:=0;
  4  cursor mycur is
  5  select * from a
  6  where id=2
  7  for update;
  8  begin
  9  open mycur;
 10  loop
 11  exit when mycur%notfound;
 12  fetch mycur into aa;
 13  iid:=iid+1;
 14  update a set id=iid
 15  where current of mycur;
 16  end loop;
 17* end;
SQL> /
declare
*
第 1 行出现错误:
ORA-01410: 无效的 ROWID
ORA-06512: 在 line 14
请有经验的高手帮忙解释一下,如何才能运行,小弟在此谢过。

解决方案 »

  1.   

    OPER@tl>select * from test;        ID NAME                      UFPDA
    ---------- -------------------- ----------
             1 赵5                          60
             2 张1                          80
             2 张1                          80
             2 张1                          80
             2 张1                          80
             2 张1                          80
             2 张1                          80已选择7行。OPER@tl>update test a
      2  set id=(select rn from (select row_number() over(order by id) rn from test) b
      3  where a.rowid=b.rowid);已更新7行。OPER@tl>select * from test order by id;        ID NAME                      UFPDA
    ---------- -------------------- ----------
             1 赵5                          60
             2 张1                          80
             3 张1                          80
             4 张1                          80
             5 张1                          80
             6 张1                          80
             7 张1                          80已选择7行。OPER@tl>
      

  2.   

    declare 
    iid int:=0; 
    cursor mycur is 
    select * from YHS_tEST3
    where id=2 
    for update; 
    begin 
    FOR CC IN mycur loop 
    iid:=iid+1; 
    update YHS_tEST3 set id=iid where current of mycur; 
    end loop; 
    end;
      

  3.   


    表名错了,用下面的试下.declare  
     iid int:=0;  
     cursor mycur is  
     select * from a 
     where id=2  
     for update;  
     begin  
     FOR CC IN mycur loop  
     iid:=iid+1;  
     update a set id=iid where current of mycur;  
     end loop;  
     end;