Oracle的自治事务

发布时间:2020-06-26 22:29:04 作者:hbxztc
来源:网络 阅读:1112

自治事务(autonomous transaction)允许你创建一个"事务中的事务",它能独立于其父事务提交或回滚。利用自治事务,可以挂起当前执行的事务,开始一个新事务,完成一些工作,然后提交或回滚,所有这些都不影响当前所执行事务的状态。自治事务提供了一种用PL/SQL控制事务的新方法,可用于:

使用例子演示自治事务如何工作

--创建测试表用于保存信息
zx@ORCL>create table t ( msg varchar2(25) );

Table created.
--创建自治事务的存储过程
zx@ORCL>create or replace procedure Autonomous_Insert
  2  as
        pragma autonomous_transaction;---指示自治事务语句
  4  begin
  5          insert into t values ( 'Autonomous Insert' );
  6          commit;
  7  end;
  8  /

Procedure created.
--创建普通存储过程
zx@ORCL>create or replace procedure NonAutonomous_Insert
  2  as
  3  begin
  4          insert into t values ( 'NonAutonomous Insert' );
  5          commit;
  6  end;
  7  /

Procedure created.

观察使用PL/SQL代码中非自治事务的行为

zx@ORCL>begin
  2          insert into t values ( 'Anonymous Block' );
  3          NonAutonomous_Insert;
  4          rollback;
  5  end;
  6  /

PL/SQL procedure successfully completed.

zx@ORCL>select * from t;

MSG
---------------------------------------------------------------------------
Anonymous Block
NonAutonomous Insert

可以观察到非自治事务的过程中的commit也把调用它的父事务也提交了,而父事务中的rollback没有起到作用。

再观察使用PL/SQL代码中非自治事务的行为

zx@ORCL>delete from t;

2 rows deleted.

zx@ORCL>commit;

Commit complete.

zx@ORCL>begin
        insert into t values ( 'Anonymous Block' );
        Autonomous_Insert;
        rollback;
end;
  6  /

PL/SQL procedure successfully completed.

zx@ORCL>select * from t;

MSG
---------------------------------------------------------------------------
Autonomous Insert

可以看到,自治事务过程中的commit只把它本身的事务提交了,而对于父事务的语句没有起到作用,而父事务中的rollback对自治事务中的语句也没有作用。


推荐阅读:
  1. 查看oracle的事务级别
  2. PostgreSQL中怎么利用DBLink实现自治事务

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

oracle 事务 自治

上一篇:我所认识的ELK Stack

下一篇:(第一篇)爬虫技术专栏之requests模块与BeautifulSoup模块

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》