zoukankan      html  css  js  c++  java
  • Oracle中的SAVEPOINT

    学习存储过程中使用断点回滚事务时,发现目前网络上存在一个问题,那就是使用断点回滚后,都忘记了一个很重要的事情,提交事务。虽然使用了断点回滚,但是断点回滚不像rollBack或commit一样结束当前事务,而使用断点回滚只会回滚到声明断点的地方,之前的产生的事务仍需要提交的,如果不提交,事务一直在数据库中缓存.

    保存点(SAVEPOINT)是事务处理过程中的一个标志,与回滚命令(ROLLBACK)结合使用,主要的用途是允许用户将某一段处理回滚而不必回滚整个事务。

    如果定义了多个savepoint,当指定回滚到某个savepoint时,那么回滚操作将回滚这个savepoint后面的所有操作(即使后面可能标记了N个savepoint)。

    例如,在一段处理中定义了五个savepoint,从第三个savepoint回滚,后面的第四、第五个标记的操作都将被回滚,如果不使用ROLLBACK TO savepoint_name而使用ROLLBACK,将会滚整个事务处理。

    一旦执行了rollback那么savepoint的操作都将撤消,当然最后一定执行一次commit,否则所有的操作都是在缓存中进行的,不会真正的写入数据库中。

    --起一个名字为A的savepoion 
    savepoint A(这个A是savepoint的名字) 
    --跳转到savepoint A处 
    rollback to A

    DECLARE
         v_number number;
    BEGIN
         v_number := 1;
         insert into DEPT values(deptno_seq.nextval,v_number,'');
         savepoint A;
         insert into DEPT values(deptno_seq.nextval,v_number+1,'');
         savepoint B;
         insert into DEPT values(deptno_seq.nextval,v_number+2,'');
         savepoint C;
         rollback to A;
         --如果这行不加,那么数据并没有写入到数据库中,只是写到了缓存中,直接查询数据库是没有插入的值的
         commit;
    END;


  • 相关阅读:
    求子数组最大和
    layout_weight layout_width = 0dp
    一些日历的实现
    只显示年月日的日历
    每日学习之0512
    git 出现The current branch is not configured for pull No value for key branch.master.merge found in configuration错误的解决办法
    git的配置
    使用Spring security框架实现登陆页面时跳转到favicon.ico问题
    播放视频(c#)
    太阳沉落了
  • 原文地址:https://www.cnblogs.com/sunice/p/9878012.html
Copyright © 2011-2022 走看看