自治事务学习记录

[复制链接]
查看11 | 回复2 | 2012-5-15 15:24:11 | 显示全部楼层 |阅读模式
自治事务是由父事务或主事务启动的,为了便于事务管理这类事务都独立于其父事务进行操作。如果在自治事务或主事务中使用了回滚或提交,或者由于某种原因发生了错误都不会影响其他事务。
可以使用名为AUTONOMOUS_TRANSACTION的编译指令pragma创建一个自治事务。
例如:
create or replace procedure logging_ins(
i_username in varchar2,
i_datetime in timestamp)
is
pragma autonomous_transaction;
begin
insert into logging (username,datetime) values (i_username,i_datetime);
commit;
end;
注意:一定要有提交或回滚操作来终止自治事务!
调用这个过程的时候它就会独立于调用它的父事务进行操作
例如:
create or replace procedure book_ins (
i_isbn in book.isbn%type,
i_category inbook.category%type,
i_title inbook.title%type,
i_num_pagesin book.num_pages%type,
i_pricein book.price%type)
is
begin
insert into book (isbn,category,title,num_pages,price)
values (i_isbn,i_category,i_title,i_num_pages,i_price);
logging_ins('plsql',systimestamp);
rolllback;
exception
when others then
dbms_output.put_line(sqlerrm);
end;
该book_ins过程首先在book表中插入了一条记录,然后调用一个自治事务--logging_ins过程,在logging表中记录了这个插入记录的事件,最后返回到父事务并执行了一个回滚操作。
回复

使用道具 举报

千问 | 2012-5-15 15:24:11 | 显示全部楼层
不错。
回复

使用道具 举报

千问 | 2012-5-15 15:24:11 | 显示全部楼层
顶一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行