自治事务pragma autonomous_transaction的使用场景(1、程序日志)

PRAGMA在PLSQL里有4个关键词的用法:

(1)autonomous_transaction-自治事务,该程序块的commit或rollback不影响外层事务;

(2)exception_init--错误代码与declare的标识符关联;

(3)restrict_references--程序包的纯度级别;

(4)serially_reusable--程序包级别的数据在引用之间不保留。

到目前为止,我只使用过自治事务一种,在平时的开发经历中,自治事务主要用于2个场景:一是程序日志,二是触发器。先看一下自治事务在日志里的妙用:

在PLSQL程序开发过程中,一般都需要记录一些中间数据或者执行时间等,但是在一个大的事务中间,需要把日志保存下来而不影响整个事务的提交或回退,就只能用自治事务了。一般新实施一个数据库时,我都先把日志程序准备好,以下是实施步骤:

Step1.建一个公用的数据库用户

比如common,pubdata,monitor等,假设是用common用户


Step2.建一个日志表


Step3.记录日志的存储过程(自治事务)


Step4.授权给public用户,使得所有数据库用户都可以使用

刚才在存储过程中已经加了 authid definer(定义者权限),存储过程中涉及的表就不用再授权了。

为了对其他用户更透明,为这个存储过程建个同义词。


Step5.现在可以使用任何数据库用户来调用这个日志程序了


执行的结果如下:


可见

1.日志表对其他用户是不可见的,当然也可以创建全局同义词开放给其他用户

2.在出错前的自治事务记录的日志是保存成功的,

有一点这个程序没有体现,在DO SOMETHING WRONG之前的主程序的事务应该是被回滚的。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值