ybaidukuai 发表于 2018-9-14 11:33:02

Oracle自治事务

  在正常情况下一但发出commit或是rollback语句就会把这之前的所有修改提交或回滚,但是在oracle中提供了一种自治事务,在自治事务中发出的commit或rollback语句只会对自治事务内的更改起做用而不会对自治事务外的修改起做用。可以通过以下例子来看到这一结果:
  首先建立一个表Create table Msg (Msg varchar(50)) 用于存储消息
  建立自治事务下的插入过程
  Create or Replace procedure AutoNomouse_Insert as
  pragma autonomouse_transcation;
  begin
  insert into Msg values('AutoNomouse Insert');
  commit;
  end;
  注:pragma autonomouse_transcation 表示在这个过程中启动自治事务
  建立正常情况下的插入过程
  Create or Replace Procedure NonAutoNomouse_Insert as
  begin
  insert into Msg Values('NonAutonomouse Insert');
  commit;
  end;
  下面在一个匿名块中分别调用上面的两个过程
  begin
  insert into Msg Values('This Main Info');
  NonAutoNomouse_Insert;
  rollback;
  end
  select * from Msg
  Msg
  __________________________________________________
  This Main Info
  NonAutonomouse Insert
  可以看到正个事务在过程NonAutoNomouse_Insert中被提交了Rollback并不起做用。
  下面调用自治事务的过程如下:
  begin
  insert into Msg Values('This Main Info');
  AutoNomouse_Insert;
  rollback;
  end
  select * from Msg
  MSG
  --------------------------------------------------------------------------
  AutoNomouse Insert
  可以看到在自治事务中只提交了自治事务内的更改,所以Rollback回滚了自治事务外的更改。

页: [1]
查看完整版本: Oracle自治事务