请问大家:游标从A表中取数据,然后循环删除A表中数据(为什么这样做,是因为删除数据时,要做其它相关操作),删除一条后立即commit.然后再循环.
这样是不是会导致游标内存区里的值变来变去呢。如 cursor cur_a is select * from table1loop
   fetch cur_a;
   when cur_a%nodatafound then exit;
   delete from table1 where ....
   --其它一系列动作
   commit;end loop;因为游标很大,必须及时commit;不然怕回滚段不足。
这是定义游标是否有问题???

解决方案 »

  1.   

    这么做会有问题的为什么不能在循环结束以后truncate table A,而在循环中不加入delete语句?
      

  2.   

    加上FOR UPDATE 子句看看
      

  3.   

    或者,把Delete 改为 Update table1 set re = ...
    然后在循环完之后处理
      

  4.   

    不知道会发生什么事情,没遇到过!但是如果游标的数据太大,很容易造成锁定。十分可以考虑多次调用该过程,每次删除和处理部分数据,每次最后commit;
      

  5.   

    弱水的解答正确,本身这样的PL/SQL就有点自相矛盾,可以不用游标,做一个执行count(*)次数的循环,循环体内直接作操作,最后truncate表。
    代码如下:
    declare 
      c int := -1;
    begin
      select count(*) into c
        from table1;
      for i in 0..c loop
      -- do somthing;
      end loop;
      truncate table table1;
    end;