ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 自治事务

自治事务

原创 Linux操作系统 作者:qgw521 时间:2008-12-11 22:30:43 0 删除 编辑

其实很早之前就知道自治事务这个概念,也大概知道自治事务的提交不会影响其他事务,但很少用。但今天突然想到一个问题,如果我在创建一个表(凡是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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-06-06

  • 博文量
    128
  • 访问量
    276758