数据库自治事务指的是在当前事务(主事务)上开启的另一个完全独立的事务,执行自治事务程序时,主事务将挂起,退出自治事务,主事务会继续。因此,就时间线而言,主事务启动自治事务后会暂时挂起,等待自治事务执行完毕后才再次运行。类似的子事务也具有相同的时间序,但是自治事务和主事务有本质的区别。
自治事务的本质也是一个事务,所以自治事务可以commit和rollback。自治事务程序正常执行结束后,自治事务内执行的所有操作会被提交并持久化;如果自治事务抛出异常,那么主事务能够捕获其抛出异常,然后用户可能根据其异常进行相应处理。
create or replace procedure write_err_log(err_msg text) as
pragma autonomous_transaction;
begin
insert into err_log values(sysdate,err_msg);
commit;
end;
create or replace procedure select_name
as
name varchar2(20);
past_due EXCEPTION;
cur cursor is select name from account where age = 20 ;
begin
update account set age=21 where id =1 ;
open cur ;
fetch cur into name ;
close cur ;
if name is null then
raise past_due;
end if;
exception
when past_due then
call write_err_log(sqlerrm);
end;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




