PRAGMA AUTONOMOUS_TRANSACTION

数据库事务是一种单元操作,要么是全部操作都成功,要么全部失败。在Oracle中,一个事务是从执行第一个数据管理语言(DML)语句开始,直到执行一个COMMIT语句,提交保存这个事务,或者执行一个ROLLBACK语句,放弃此次操作结束。

针对这种困境,Oracle提 供了一种便捷的方法,即自治事务。自治事务从当前事务开始,在其自身的语境中执行。它们能独立地被提交或重新运行,而不影响正在运行的事务。正因为这样, 它们成了编写错误日志表格的理想形式。在事务中检测到错误时,您可以在错误日志表格中插入一行并提交它,然后在不丢失这次插入的情况下回滚主事务。

因为自治事务是与主事务相分离的,所以它不能检测到被修改过的行的当前状态。这就好像在主事务提交之前,它们一直处于单独的会话里,对自治事务来说,它们是不可用的。然而,反过来情况就不同了:主事务能够检测到已经执行过的自治事务的结果。

PRAGMA AUTONOMOUS_TRANSACTION 自治事务 不受别的事务的影响

1 CREATE OR REPLACE FUNCTION FUNC_CREATE_DEMO RETURN NUMBER IS
2   LINK_ID NUMBER;
3   PRAGMA AUTONOMOUS_TRANSACTION;
4 BEGIN
5   --LINK_ID RES_SPEC_ID OPR_STATE_ID
6   --do something  insert update delete
7   COMMIT;
8   RETURN LINK_ID;
9 END;

时间: 2024-10-29 04:10:32

PRAGMA AUTONOMOUS_TRANSACTION的相关文章

oracle 触发器 pragma autonomous_transaction

from:http://blog.csdn.net/ruru7989/article/details/30712987一般情况下在触发器中是不能使用DDL语句的,使用自治事务可以实现 可以在触发器中加入: pragma autonomous_transaction; 表示自由事务处理. CREATE OR REPLACE TRIGGER temp_ais AFTER insert ON atest for each row DECLARE pragma autonomous_transactio

关于自治事务和锁 PRAGMA AUTONOMOUS_TRANSACTION & LOCK

之前遇到的一个问题, 可以稳定重现. Oracle 的 INV 提供了一个接口 inv_lot_api_pub.auto_gen_lot() , 用来自动为 item 产生 lot number, 调用一次这个接口, lot number 就会自动 + 1; 看里头的代码, 是先从 MTL_SYSTEM_ITEMS 这个表里面取出一个字段 start_auto_lot_number, 比方说取出来的数值是1000, 那么就会把 1000 当做当前的 lot number, 接着会调用一个 pro

通过JMS监听Oracle AQ,在数据库变化时触发执行Java程序

环境说明 一Oracle高级消息队列AQ 创建消息负荷payload 创建队列表 创建队列并启动 队列的停止和删除 入队消息 出队消息 二Java使用JMS监听并处理Oracle AQ队列 创建连接参数类 创建消息转换类 主类进行消息处理 三监控表记录变化通知Java 创建表 创建存储过程 创建触发器 环境说明 本实验环境基于Oracle 12C和JDK1.8,其中Oracle 12C支持多租户特性,相较于之前的Oracle版本,使用'C##用户名表示用户',例如如果数据库用户叫kevin,则登

ORACLE 在重要的表上限制某些IP、用户的恶意操作

1,问题描述          oracle默认账号是没有限制ip的,这样的隐患就在于,如果我知道了oracle账号用户名密码,我只要能连接到db,就可以对db进行操作,这样对于线上的db来说是很危险的,因为有些非dba人员,比如开发人员.测试人员一不小心误删除了线上的数据,就惨了,坑太大不敢看.所以查了查,找到一种办法,在一些重要的表上加触发器来限制用户对线上db的表的操作. 2,触发器编写 如果开全局的sql审计,消耗性能太大,不太合适,想来只有在某些重要的表上做限制,初步解决问题了. 1)

ORACLE之常用FAQ V1.0

[B]第一部分.SQL&PL/SQL[/B][Q]怎么样查询特殊字符,如通配符%与_[A]select * from table where name like 'A\_%' escape '\' [Q]如何插入单引号到数据库表中[A]可以用ASCII码处理,其它特殊字符如&也一样,如 insert into t values('i'||chr(39)||'m');  -- chr(39)代表字符'或者用两个单引号表示一个or insert into t values('I''m');  

事务与锁定

DML(DATA MANIPULATION LANGUAGE):INSERT,UPDATE,DELETE,MERGEDDL(DATA DEFINITION LANGUAGE):CREATE,ALTER,DROPDCL(DATA CONTROL LANGUAGE):授于或回收访问数据库的某种特权 一个事务开始于一条执行的SQL语句,结束于:    1.用户提交事务    2.用记回滚事务    3.遇到DDL语句    4.遇到DCL语句    5.用户结束会话    6.数据库关闭或系统崩溃显式

ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)

原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE PL/SQL编程之八:把触发器说透 得到了大家的强力支持,感谢.接下来再下猛药,介绍下一篇,大家一定要支持与推荐呀~!我也才有动力写后面的.   本篇主要内容如下: 6.1 引言 6.2 创建函数 6.3 存储过程 6.3.1 创建过程 6.3.2 调用存储过程 6.3.3 AUTHID 6.3.4 

【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航

原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人品牌. 本是成书的,但后来做其他事了,就无偿的贡献出来,被读者夸其目前为止最“实在.经典”的写ORACLE PL/SQL编程的文章-! 觉得对你有帮助,请留言与猛点推荐,谢谢. [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) 本篇主要内容如下:第一章 PL/S

具体解释EBS接口开发之WIP模块接口

整体说明 文档目的 本文档针对WIP模块业务功能和接口进行分析和研究,对採用并发请求方式和调用API方式分别进行介绍 内容 WIP模块经常使用标准表简单介绍 WIP事物处理组成 WIP相关业务流程 WIP相关API研究事例 (十)參考文档(七)採购相关的一些知识 (一)WIP模块经常使用标准表简单介绍 1.1   经常使用标准表 例如以下表中列出了与WIP导入相关的表和说明: 表名 说明 其它信息 BOM_STRUCTURES_B BOM头信息 BOM_COMPONENTS_B BOM组件信息