当前位置:   article > 正文

Oracle 存储过程 中如何使用事务Transaction 自主事务 自治事务_oracle存储过程中使用事务

oracle存储过程中使用事务

 

Oracle基础 存储过程和事务

一、事务和存储过程

  在存储过程中如何使用事务。当需要在存储过程中同时执行多条添加、修改、删除SQL语句时,为了保证数据完整性,我们需要使用事务。使用方式和在PL-SQL中非常相似,但也有一些区别。  

复制代码

  1. --带事务的存储过程
  2. CREATE OR REPLACE PROCEDURE Account_zhuanzhang(fromuser NUMBER,touser NUMBER,money NUMBER) IS
  3. BEGIN
  4. UPDATE account SET balance = balance - money WHERE id = fromuser;
  5. UPDATE account SET balance = balance + money WHERE id = touser;
  6. COMMIT;
  7. EXCEPTION
  8. WHEN OTHERS THEN
  9. dbms_output.put_line('转账失败');
  10. ROLLBACK;
  11. END Account_zhuanzhang;

复制代码

调用事务

复制代码

  1. SELECT * FROM ACCOUNT;
  2. DECLARE
  3. fromuser NUMBER := 1;
  4. touser NUMBER := 2;
  5. money NUMBER := &m;
  6. BEGIN
  7. account_zhuanzhang(fromuser,touser,money);
  8. END;

复制代码

 

 

二、自主事务处理:

  自主事务:是由零一个事务启动的独立事务处理。自主事务处理可以暂停主事务处理,也就是处理自己存储过程内部的事务,当自主事务处理完之后会恢复主事务处理。

  PRAGMA AUTONOMOUS_TRANSACTION;  --定义为自主事务,不受其他事务提交,回滚的影响

  例:

复制代码

  1. --自主事务:带参数添加部门信息,最后使用了回滚
  2. CREATE OR REPLACE PROCEDURE PRO_DEPT_ADD(DEPTNO NUMBER,DNAME VARCHAR2,LOC VARCHAR2) AS
  3. PRAGMA AUTONOMOUS_TRANSACTION; --定义为自主事务,不受其他事务提交,回滚影响
  4. BEGIN
  5. INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (DEPTNO, DNAME, LOC);
  6. ROLLBACK; --自主事务回滚操作,不影响主事务。
  7. END;

复制代码

复制代码

  1. --主事务,添加部门信息,并调用带参数的自主事务,自己本身提交
  2. CREATE OR REPLACE PROCEDURE PRO_DEPT_ADD2 AS
  3. BEGIN
  4. INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (60, 'test1', 'test2');
  5. PRO_DEPT_ADD(70, 'test', 'test'); --如果调用的事务回滚,如果不是自主事务当前存储过程中插入数据也要一起回滚。但是添加了自主事务后,自主事务提交内容不会影响到当前存储过程
  6. COMMIT;
  7. END;

复制代码

调用主事务:

  1. BEGIN
  2. pro_dept_add2(); --调用完毕后,为60的部门插入成功,但是为70的部门信息回滚了。只有一条插入成功!
  3. END;

 

  总结自主事务:

  1、自主事务处理结果的变化不依赖于主事务处理的状态或最终配置。

  2、自主事务处理提交或回滚时,不影响主事务处理的结果。

  3、自主事务提交一旦提交,该自主事务处理结果的变化对于其他事务处理就是课件的。这意味着,用于可以访问已更新的信息,无需等待主事务处理提交。

  4、自主事务处理可以启动其它自主事务处理。

 

分类: Oracle

标签: oracle

好文要顶 关注我 收藏该文  

Builder
关注 - 17
粉丝 - 51

+加关注

1

1

« 上一篇:Oracle基础 存储过程和游标
» 下一篇:Oracle基础 自定义函数

https://www.cnblogs.com/zhengcheng/p/4217531.html

 

 

 

 

存储过程中如何使用事务Transaction

学习也休闲 学习也休闲 2014-08-16 13:21:54

一、Begin Trans、Rollback Trans、Commit Trans方法


1、用于事务处理的方法。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。


2、事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。



二、存储过程中使用事务Transaction实例


 Declare @id int
    BEGIN TRANSACTION
   
       Insert into xxxxxTable(f1,f2)values(@a,@b)
       Select @id=@@identity
        Insert into abcTable(ff1,ff2,ff3)values(@c,@id,@dd)

        IF @@error <> 0 --发生错误
        BEGIN
            ROLLBACK TRANSACTION
            RETURN 0
        END
        ELSE
        BEGIN
            COMMIT TRANSACTION
            RETURN 1 --执行成功
       END



参考资料: 存储过程中使用事务Transaction http://www.studyofnet.com/news/551.html

存储过程 事务 Transaction

https://www.douban.com/note/395757588/

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/509236
推荐阅读
相关标签
  

闽ICP备14008679号