autonomous_transaction

在autonomous_transaction程序中执行了insert、update、delete后必须要执行commit或rollback

SQL> create table tmp(content varchar2(100));

Table created


SQL> create or replace function autonomous_transaction_func
  2  return varchar2
  3  is
  4     pragma autonomous_transaction;
  5  begin
  6    insert into tmp values('autonomous_transaction_func');
  7    commit;
  8    return 'autonomous_transcation';
  9  end;
 10  /
Function created


SQL> create or replace procedure non_autonomous_transaction
  2  is
  3  begin
  4    insert into tmp values('non_autonomous_transaction_proc');
  5    commit;
  6  end;
  7  /
Procedure created


SQL> set serveroutput on


SQL> declare
  2    a varchar2(100);
  3  begin
  4    insert into tmp values('main_transaction1');
  5    non_autonomous_transaction;
  6    insert into tmp values('main_transaction2');
  7    a:=autonomous_transaction_func();
  8    dbms_output.put_line(a);
  9    rollback;
 10  end;
 11  /
autonomous_transcation
PL/SQL procedure successfully completed


SQL> select * from tmp;
CONTENT
--------------------------------------------------------------------------------
main_transaction1
non_autonomous_transaction_proc
autonomous_transaction_func


SQL> Create Table tmp(str Varchar2(20)) ;
Table created


SQL> 
SQL> Create or Replace Procedure proc
  2  Is
  3    Pragma Autonomous_Transaction;
  4  Begin
  5    Insert Into tmp Values('a');
  6  End;
  7  /
Procedure created


SQL> 
SQL> Begin
  2    proc;
  3  End;
  4  /
Begin
  proc;
End;
ORA-06519: 检测到活动的独立的事务处理, 已经回退
ORA-06512: 在 "ZLHIS.PROC", line 6
ORA-06512: 在 line 2


SQL> 
SQL> Create or Replace Procedure proc
  2  Is
  3    Pragma Autonomous_Transaction;
  4  Begin
  5    Insert Into tmp Values('a');
  6    Commit;
  7  End;
  8  /
Procedure created


SQL> 
SQL> Begin
  2    proc;
  3  End;
  4  /
PL/SQL procedure successfully completed


SQL> select * from tmp;
STR
--------------------
a
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值