oracle自治事务

自治事务的使用,独立于外层的事务控制

create or replace procedure insert_err_po(
OrderNo number,CycleId number
)
is
pragma autonomous_transaction;
begin
insert into tt_err_po(po_num_id,cycle_num_id) values(OrderNo,CycleId);
commit;
end;
时间: 2024-10-06 06:56:10

oracle自治事务的相关文章

Oracle - 自治事务autonomous transaction

自治事务 - autonomous transaction 在Oracle数据库中,有时候我们会希望记录一个过程或者函数的运行日志,不管正常运行结束还是触发异常结束,都要记录. 正常结束的没有问题,但是触发异常的情况下,一般的过程或者函数显然不能在插入运行日志之后直接Commit,因为触发异常后相关业务逻辑需要RollBack. 而自治事务就能够很好的避免了这样的问题,就是说自治事务是在某个会话中独立开启一个事务,在其中处理的操作不会影响到同一会话中其他事务未提交的内容. 下面开始举个例子说明一

Oracle自治事务实际用例

如下,新建两个存储过程: 在主自治事务中,我们插入一条记录,然后在自治事务中,查看表中行数,然后尝试插入三条记录,查看行数,最后rollback 查看行数,最后返回主事务,查看行数. 1.如下代码: --主事务 PROCEDURE p_test_at_and_mt IS cnt NUMBER := -1; BEGIN INSERT INTO msg VALUES ('father Record'); SELECT COUNT(*) INTO cnt FROM msg; dbms_output.p

Oracle与SQL自治事务

自治事务 自治事务是独立的事务操作,如果考虑到事务回滚,必须单独写成一个触发器来完成, 一个事务A在另一个事务B内被调用,那个事务A是自治事务,自治事务A执行过程中会脱离其session内未执行完毕的事务的影响. 如果session从B事务开始——A事务开始和结束——B事务结束 上述的A事务不受没有完成的B事务的影响,然后A事务执行完毕后再次回到B事务执行没有完成的B事务. 通过pragma autonomous_transaction将一个pl/sql程序结构设定为自治事务,pragma是编译

oracle:触发器,自治事务 trigger

create or replace trigger TRI_FC83_INSERT before insert ON FC83 FOR EACH ROW declare PRAGMA AUTONOMOUS_TRANSACTION; BEGIN :new.afc212 := '1'; delete from fc83 where afc001 = :new.afc001 and afa031 = :new.afa031 and afc210 = :new.afc210; commit; END T

关于Oracle AUTONOMOUS TRANSACTION(自治事务)的介绍

AUTONOMOUS TRANSACTION(自治事务)的介绍 在基于低版本的ORACLE做一些项目的过程中,有时会遇到一些头疼的问题,比如想在执行当前一个由多个DML组成的transaction(事务)时,为每一步DML记录一些信息到跟踪表中,由于事务的原子性,这些跟踪信息的提交将决定于主事务的commit或rollback. 这样一来写程序的难度就增大了, 程序员不得不把这些跟踪信息记录到类似数组的结构中,然后在主事务结束后把它们存入跟踪表.哎,真是麻烦! 有没有一个简单的方法解决类似问题呢

Oracle的自治事务

自治事务(autonomous transaction)允许你创建一个"事务中的事务",它能独立于其父事务提交或回滚.利用自治事务,可以挂起当前执行的事务,开始一个新事务,完成一些工作,然后提交或回滚,所有这些都不影响当前所执行事务的状态.自治事务提供了一种用PL/SQL控制事务的新方法,可用于: 顶层匿名块: 本地(过程中的过程).独立或打包的函数和过程: 对象类型的方法: 数据库触发器. 使用例子演示自治事务如何工作 --创建测试表用于保存信息 [email protected]&

Oracle 通过触发器 来创建 同步临时表 及处理 通过 自治事务 来解决 查询 基表的问题

// 触发器 create or replace trigger tr_sync_BD_MARBASCLASS after INSERT or UPDATE on BD_MARBASCLASS for each row declare v_cnt integer; PRAGMA AUTONOMOUS_TRANSACTION; -- 自治事务 begin /** * Name : tr_sync_BD_MARBASCLASS * Desc : 物料分类 增量同步 触发器 * Author : wu

关于自治事务和锁 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

Oracle自制事务

数据库事务是一种单元操作,要么全部操作成功,要么全部失败.在Oracle中,一个事务是从执行第一个数据操作语言(DML)语句开始的,直到执行一个COMMIT语句,提交保存事务,或执行一个ROLLBACK语句,放弃此次操作结果. 事务的“要么全部完成,要么什么都不做的”特性,会使得将错误信息记录到数据表中变的很困难,因为当事务失败重新运行时,用来编写日志条目的insert语句还未完成. 针对这种困境,Oracle提供了一种便捷的方法,即自治事务.自治事务从当前事务开始,在其自身的语境中执行.它们能