加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle的自治事务

发布时间:2020-12-12 15:30:12 所属栏目:百科 来源:网络整理
导读:自治事务(autonomous transaction)允许你创建一个"事务中的事务",它能独立于其父事务提交或回滚。利用自治事务,可以挂起当前执行的事务,开始一个新事务,完成一些工作,然后提交或回滚,所有这些都不影响当前所执行事务的状态。自治事务提供了一种用PL/SQ

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

  • 顶层匿名块;

  • 本地(过程中的过程)、独立或打包的函数和过程;

  • 对象类型的方法;

  • 数据库触发器。

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

--创建测试表用于保存信息
zx@ORCL>createtablet(msgvarchar2(25));

Tablecreated.
--创建自治事务的存储过程
zx@ORCL>createorreplaceprocedureAutonomous_Insert
2as
pragmaautonomous_transaction;---指示自治事务语句
4begin
5insertintotvalues('AutonomousInsert');
6commit;
7end;
8/

Procedurecreated.
--创建普通存储过程
zx@ORCL>createorreplaceprocedureNonAutonomous_Insert
2as
3begin
4insertintotvalues('NonAutonomousInsert');
5commit;
6end;
7/

Procedurecreated.

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

zx@ORCL>begin
2insertintotvalues('AnonymousBlock');
3NonAutonomous_Insert;
4rollback;
5end;
6/

PL/SQLproceduresuccessfullycompleted.

zx@ORCL>select*fromt;

MSG
---------------------------------------------------------------------------
AnonymousBlock
NonAutonomousInsert

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

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

zx@ORCL>deletefromt;

2rowsdeleted.

zx@ORCL>commit;

Commitcomplete.

zx@ORCL>begin
insertintotvalues('AnonymousBlock');
Autonomous_Insert;
rollback;
end;
6/

PL/SQLproceduresuccessfullycompleted.

zx@ORCL>select*fromt;

MSG
---------------------------------------------------------------------------
AutonomousInsert

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读