请教大家一个问题,小弟有一张原始表。数据大致如下: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
请有经验的高手帮忙解释一下,如何才能运行,小弟在此谢过。
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 赵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>
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;
表名错了,用下面的试下.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;