【DB笔试面试392】Oracle的自治事务是什么?
- 2019 年 10 月 10 日
- 筆記
Q
题目
Oracle的自治事务是什么
A
答案
Oracle的自治事务(Autonomous Transaction)是将一个主事务分割成几个子事务,在执行完子事务以后再继续执行主事务。这里的关键是,子事务是独立于主事务的,子事务中的ROLLBACK和COMMIT操作只会影响子事务中的DML操作;同样,主事务中的ROLLBACK和COMMIT操作只会影响主事务中的DML操作,而不会影响子事务中的操作。在子事务中已经COMMIT的操作,不会被主事务中的ROLLBACK撤销。
可以在程序开头使用如下命令实现自治事务:
PRAGMA AUTONOMOUS_TRANSACTION;
定义自治事务必须遵循以下规则:
(1)如果要被定义为自治事务的程序是匿名的,那么它必须是一个最外层的程序块。
(2)如果要被定义为自治事务的程序不是匿名的,那么它必须是函数或者存储过程。在一个包中,只有其中的函数或存储过程能够定义成自治事务。整个包不能声明为自治事务。
(3)一个对象的方法可以声明为自治事务。
(4)触发器可以声明为自治事务。
(5)内嵌程序块不能声明为自治事务。
需要注意的是,对于一个匿名的自治事务程序块来说,只有这个块的BEGIN和END之间的代码被看作是自治事务。
自治事务可以用来解决“ORA-14551: 无法在查询中执行DML操作”错误。触发器无法包含COMMIT语句,除非有PRAGMA AUTONOMOUS_TRANSACTION标记。但是,只有触发中的语句才能被提交,主事务则不行。

DB笔试面试历史连接
http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w |
---|
About Me:小麦苗
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:618766405
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步