Oracle 的 Autonomous_transaction( 自由性交易)

建立自由性交易, 使用名为autonomous_transaction的编译指示(编译命令,如, #include), 这个编译命令要放在declare里面.


Delcare or replace procedure procedure_name(params, types)


AS


PRAGMA AUTONOMOUS_TRANSACTION;


当程序执行的时候,pl/sql 会把autonomous_transaction当成独立存在的区域来处理.

用途是用在记录程序事件,不影响程序的进行.


一切用pl/sql 代码说话:


/* Formatted on 2006/04/27 14:05 (Formatter Plus v4.8.7) */


--test autonomous transaction


CREATE TABLE logging_infos(log_info VARCHAR2(200), log_time DATE);


COMMIT ;


/* Formatted on 2006/04/27 14:05 (Formatter Plus v4.8.7) */


--create autonomous transaction procedure


CREATE OR REPLACE PROCEDURE logging_info (


log_info_in VARCHAR2,


log_time_in DATE


)


--If your procedure's name is exit in oracle( DB) , then you cann't use it to declare a procedure with the same name


AS


PRAGMA AUTONOMOUS_TRANSACTION;


BEGIN


INSERT INTO logging_infos


(log_info, log_time


)


VALUES (log_info_in, log_time_in


);


COMMIT;


END;


books;


--create main procedure


CREATE OR REPLACE PROCEDURE book_insert (


isbn_in VARCHAR2,


title_in VARCHAR2,


summary_in VARCHAR2,


author_in VARCHAR2,


date_published_in DATE,


page_count_in NUMBER


)


AS


BEGIN


INSERT INTO books


(isbn, title, author, date_published,


page_count


)


VALUES (isbn_in, title_in, author_in, date_published_in,


page_count_in


);


-- call autonomous transcation


logging_info ('aaron_sys', SYSTIMESTAMP);


ROLLBACK;


--rollback for main procedure , not the autonomous transcation


EXCEPTION


WHEN OTHERS


THEN


dbms_ouput.put_line (SQLERRM);


END;


--test the main procedure


BEGIN


book_insert ('ISBN987654321',


'TEST2',


'summary:ddddd',


'Aaron',


TO_DATE ('2006-04-25', 'yyyy-mm-dd'),


88


);


END;


--successfuly completed


SELECT *


FROM books; ---doesn't have the add info


SELECT *


FROM logging_infos; --the logging info is added .


自动交易(autonomous_transaction 繁体版本的书,简体翻译成自由性交易或事前交易,还是觉得自由性交易比较好) , 一定要用commit or rollback, 如果不用的结果就是:


可以编译,但是在执行的时候会提示:


ORA-06519: active autonomous transaction detected and rolled back

ORA-06512: at "SYS.LOGGING_INFO", line 10

ORA-06512: at "SYS.BOOK_INSERT", line 15

ORA-06512: at line 2


建立自由性交易, 使用名为autonomous_transaction的编译指示(编译命令,如, #include), 这个编译命令要放在declare里面.


Delcare or replace procedure procedure_name(params, types)


AS


PRAGMA AUTONOMOUS_TRANSACTION;


当程序执行的时候,pl/sql 会把autonomous_transaction当成独立存在的区域来处理.

用途是用在记录程序事件,不影响程序的进行.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光义

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值