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;


  • 相关阅读:
    互联网创业瞄准Web3.0时代 风投商造梦与毁梦 沧海
    SOA基础结构探究:服务调节与指挥 沧海
    排序算法小结 沧海
    上班触感 沧海
    经典程序摘录 沧海
    经典C程序100例 沧海
    ITIL进入快速增长期 2010年亚太市场将达$8亿 沧海
    必须要掌握的七种谈话技巧 沧海
    如何准备软件工程师的面试 沧海
    Junit教程 拂晓风起
  • 原文地址:https://www.cnblogs.com/sunice/p/9878012.html
Copyright © 2011-2022 走看看