前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试392】Oracle的自治事务是什么?

【DB笔试面试392】Oracle的自治事务是什么?

作者头像
小麦苗DBA宝典
发布2019-09-29 16:35:03
9710
发布2019-09-29 16:35:03
举报

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

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档