如果一个存储过程是执行将一个表的数据转移到历史表中,然后删除这个表的数据。。现在如果插入历史表数据的过程中,成功了一半。中间有一条数据出错了。存储过程是否会回滚成功插入历史表的那一半数据?

解决方案 »

  1.   

    是否使用了显示事务处理,即当执行失败时,执行rollback。
      

  2.   

    存储过程不需要用专门的语句来声明事务
    如,下面的存储过程就是一个事务
    进入存储过程即开始事务
    提交(commit)或回滚(rollback)则事务完成
    亦即若干语句所有都成功则提交,要么若干语句中任一语句失败则将回滚
    CREATE OR REPLACE PROCEDURE p_MoveToHistory IS
    BEGIN
      --处理转入历史的若干SQL语句
      COMMIT;--成功则提交
    EXCEPTION
      WHEN other THEN
        ROLLBACK;--异常失败则回滚
    END;
      

  3.   

    上面的other应为others,亦即任何其它异常
    如果没有异常处理部分的rollback;ORACLE将直接报错并回滚!
    当然自已写上更清晰。