oracle自治事务的写法_Oracle的自治事务

自治事务(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对自治事务中的语句也没有作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值