在一个for update的CURSOR里要按条件执行对当前记录的delete操作,并且还要批量commit,执行说fetch顺序无效,请问是因为commit后CURSOR无效了么?如何解决保证能批量commit?

解决方案 »

  1.   

    没错!是不行的!
    for update 后 如果在中间commit 那就会报错的!
    1,一个方法是 不用for update 
    2,另一方法是 就是一个事务结束再commit;
       可以多写几个事务,把一个批量处理作为一个事务处理;
      

  2.   

    在cursor使用过程中commit是肯定行不通的.但要做到批量commit, 可以用另一个方式:
    循环当中,当delete的数量达到一定数量时,就设置一个savepoint,
    ....
    一直到全部循环结束,那么就commit.
    如果中间有exception抛出, 那么就commit上一次设置的savepoint, rollback savepoint之后的事务.
      

  3.   

    想骂你。为何操作要使用for update语句,为了防止修改吗?既然是为了防止修改,为何又要删除呢??尽量不要在存储过程或者函数或者操作中使用for update语句。除非不得已!
      

  4.   

    呵呵,都是for update 惹的祸,如果没有这个子句的话是可以随时commit的,只是要考虑效率的问题