刚刚发错了 忘了关闭游标
declare
type my_cur is ref cursor;
cur my_cur;
v_cur aaa%rowtype;
begin
open cur for
select * from aaa;
loop
fetch cur into v_cur;
v_cur.b:='1000';
exit when cur%notfound;
end loop;
close cur;
commit;
end;
表aaa中有a,b两个字段
执行后b中没有数据。高手指教!

解决方案 »

  1.   

    fetch cur into v_cur;
    exit when cur%notfound;
    v_cur.b:='1000';调换下位置看看
      

  2.   

    执行后B的数据为1000,可以加上DBMS_PUT.PUT_LINE(v_cur.b)就知道了
      

  3.   

    我认为你应该把v_cur.b:='1000';改成update aaa set b='1000' where a=v_cur.a;
      

  4.   

    en 楼上的方法可以 我试过了,但是我就是想不通我的什么地方不对 为什么不能更新b的值
      

  5.   

    宝宝我测试怎么不行啊 是不是什么地方错了?用update aaa set b='1000' where a=v_cur.a;
    是可以的,但是为什么我的方法不对
      

  6.   

    SQL> declare
      2  type my_cur is ref cursor;
      3  cur my_cur;
      4  v_cur test%rowtype;
      5  begin
      6  open cur for
      7  select * from test;
      8  loop
      9  fetch cur into v_cur;
     10  v_cur.id:=10;
     11  exit when cur%notfound;
     12  end loop;
     13  dbms_output.put_line(v_cur.id);
     14  commit;
     15  end
     16  ;
     17  /10PL/SQL procedure successfully completedSQL> 我的执行
      

  7.   

    我执行后也显示“PL/SQL 过程已成功完成”但是表中的数据根本不改变
      

  8.   

    v_cur.b:='1000';这一句不是修改表中的数据吗?一定要用update吗?
      

  9.   

    v_cur.b:='1000';这一句不是修改表中的数据吗?一定要用update吗?
    --只是修改游标v_cur.b的值,不会更新表的