自治事务

其实很早之前就知道自治事务这个概念,也大概知道自治事务的提交不会影响其他事务,但很少用。但今天突然想到一个问题,如果我在创建一个表(凡是DDL之类的操作,因为执行DDL操作就隐含提交了),又不想其他的操作提交,该怎么办呢?就用自治事务。下面做一个测试。

SQL> select * from test;
 
        ID NAME
---------- ------------------------------
         1 test
         2 test2
         3 wang
         4 guang

SQL> update test set name='qi' where id=1;
 
1 row updated
 
SQL> drop table test_auto;
 
Table dropped
 
SQL> rollback;
 
Rollback complete
 
SQL> select * from test;
 
        ID NAME
---------- ------------------------------
         1 qi
         2 test2
         3 wang
         4 guang

因为drop 是DDL操作,在DROP的同时就commit了,所以rollback已经不起作用了,下面试下自治事务。

SQL> create procedure test_autonomous
  2  is
  3   pragma autonomous_transaction;
  4  begin
  5   execute immeidate 'create table test_auto (id number,salary varchar2(30))';
  6   exception
  7    when others then
  8     rollback;
  9   end test_autonomous;
 10  /

SQL> select * from test;
 
        ID NAME
---------- ------------------------------
         1 qi
         2 test2
         3 wang
         4 guang
 
SQL> select * from test_auto;
 
select * from test_auto
 
ORA-00942: table or view does not exist
 
SQL> update test set name='test auto' where id=1;
 
1 row updated

SQL> execute test_autonomous;
 
PL/SQL procedure successfully completed
 
SQL> select * from test_auto;
 
        ID SALARY
---------- ------------------------------
 
SQL> rollback;
 
Rollback complete
 
SQL> select  * from test;
 
        ID NAME
---------- ------------------------------
         1 qi
         2 test2
         3 wang
         4 guang

已经创建了表test_auto,但是因为创建表的操作是自治事务,所以不会影响到test的更新这个事务操作,这就是自治事务的一个好处。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13387766/viewspace-510014/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13387766/viewspace-510014/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值