我定义了一个存储过程,如下:
create procedure proc_update
is  beginUPDATE B_T_RWPC AA set AA.ISENABLE = 2 WHERE SYSDATE > AA.PCENDTIME AND AA.ISENABLE = 1UPDATE B_T_USERTASK UT SET UT.ISCCOMPLETE = 2 WHERE UT.TASKID IN (SELECT BB."TaskID" FROM IEJU.V_TASKBYBATCH BB WHERE SYSDATE > BB.PCENDTIME AND BB.ISENABLE = 1)commit;
end;我希望这个存储过程里面的两个UPDATE语句,要么都执行成功,要么都执行不成功,一个成功另一个不成功就让它回滚

解决方案 »

  1.   

    create procedure proc_update
    is   begin
    if(
    UPDATE B_T_RWPC AA set AA.ISENABLE = 2 WHERE SYSDATE > AA.PCENDTIME AND AA.ISENABLE = 1UPDATE B_T_USERTASK UT SET UT.ISCCOMPLETE = 2 WHERE UT.TASKID IN (SELECT BB."TaskID" FROM IEJU.V_TASKBYBATCH BB WHERE SYSDATE > BB.PCENDTIME AND BB.ISENABLE = 1))
    commit;
    else
    rollback;
    end;
      

  2.   

    [Err] ORA-24344: 成功, 但出现编译错误
      

  3.   

    亲,你们都跑哪去了? 两个update语句我都是测试了的,可以的嘛 
      

  4.   

    事务,更新失败就回滚呗……将rollback写在异常处理的地方……
    create procedure proc_update
    is   
    begin
    UPDATE B_T_RWPC AA set AA.ISENABLE = 2 WHERE SYSDATE > AA.PCENDTIME AND AA.ISENABLE = 1
    UPDATE B_T_USERTASK UT SET UT.ISCCOMPLETE = 2 WHERE UT.TASKID IN (SELECT BB."TaskID" FROM IEJU.V_TASKBYBATCH BB WHERE SYSDATE > BB.PCENDTIME AND BB.ISENABLE = 1)
    commit;
    exception
       when others then
            rollback;
    end;