设为首页 收藏本站
查看: 600|回复: 0

[经验分享] Oracle 的 Autonomous_transaction( 自由性交易)

[复制链接]

尚未签到

发表于 2016-7-28 11:22:19 | 显示全部楼层 |阅读模式
建立自由性交易, 使用名为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当成独立存在的区域来处理.

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-250668-1-1.html 上篇帖子: oracle pl/sql函数几个要点 下篇帖子: 分页显示(jsp,sqlserver,mysql,oracle)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表