今天从项目中看到一个触发器,看到一段
PROCEDURE a(v_apply_no NUMBER,v_line_no NUMBER,v_rma_center NUMBER) IS
PRAGMA AUTONOMOUS_TRANSACTION;
以前都没见过这个AUTONOMOUS_TRANSACTION,于是google之
找了好几篇,弄明白大概是干什么用的了
原文大概是这样:
Autonomous Transactions允许你不理会当前的上下文环境,去完成一个新的transaction,而当你回到原来的上下文环境的时候,这个新transaction做过的事情不会受到影响。
呃,似乎不太好懂
看个例子吧~
CREATE TABLE at_test (
id NUMBER NOT NULL,
description VARCHAR2(50) NOT NULL
);
INSERT INTO at_test (id, description) VALUES (1, 'Description for 1');
INSERT INTO at_test (id, description) VALUES (2, 'Description for 2');
//先不commit;
然后
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
FOR i IN 3 .. 10 LOOP
INSERT INTO at_test (id, description)
VALUES (i, 'Description for ' || i);
END LOOP;
COMMIT;
END;
这时候去SELECT * FROM at_test;会发现有10条记录,
好,rollback 再SELECT * FROM at_test;
有意思的事出现了~只有8条资料,
对,你应该懂了,procedure中的commit只对当前的AUTONOMOUS_TRANSACTION中的insert 动作起了作用,所以前面2个insert就被rollback啦,很好懂吧
分享到:
相关推荐
这种机制使用PRAGMA_AUTONOMOUS_TRANSACTION语句来定义自治事务。自治事务可以是存储过程、函数、本地过程、打包过程、类型方法或顶层匿名块等形式。 自治事务的特点是,它与调用事务无关联,彼此独立。自治事务...
自治事务(Autonomous Transaction)是一种特殊的事务类型,它可以在主事务的执行过程中独立启动和提交,不受主事务的提交或回滚的影响。自治事务主要用于日志记录、审计、通知等功能,确保即使主事务失败,关键的...
在某些情况下,可能需要在触发器内部进行一些操作,而这些操作又不希望受到触发器外部事务的影响,这时候就需要使用到自治事务(Autonomous Transaction)。通过声明`Pragma Autonomous_Transaction;`,可以在触发器...
在上面的示例中,我们使用 PRAGMA AUTONOMOUS_TRANSACTION 语句来声明自治事务,然后调用 Func_GenerateCode 函数来生成单据编号,并将其保存到数据库中。这样即使保存操作失败,自治事务也可以确保数据的一致性。 ...
Seata:Simple Extensible Autonomous Transaction Architecture,简易可扩展的自治式分布式事务管理框架,其前身是fescar。阿里巴巴GTS的开源版实现,是一种分布式事务的解决方案,详情请参看seata官方文档。 seata...
Seata,全称Simple Extensible Autonomous Transaction Architecture,是一个开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。它旨在解决微服务架构下的分布式事务问题,支持AT(两阶段提交...
在Oracle中,通过使用`PRAGMA AUTONOMOUS_TRANSACTION`语句,我们可以创建一个自主事务(Autonomous Transaction),这种事务在当前事务的上下文中运行,但有自己的提交和回滚机制,不受外部事务的影响。 1. **独立...
Oracle自治事务(Autonomous Transaction)机制可以解决这个问题,确保触发器和存储过程之间的事务独立性。 触发器调用存储过程的过程中可能会出现的问题是,insert语句不是自动提交的,因此当insert语句没有提交时...
Fescar(原名Seata,即Simple Extensible Autonomous Transaction Architecture)是阿里巴巴开源的一款高性能、轻量级的分布式事务解决方案,适用于微服务架构。fescar-transaction.zip文件是一个包含Fescar分布式...
Seata(Simple Extensible Autonomous Transaction Architecture)是一款开源的分布式事务解决方案,主要针对微服务场景下的分布式事务问题。在0.9.0版本中,Seata提供了高性能和简单易用的特性,旨在帮助开发者解决...
Seata(Simple Extensible Autonomous Transaction Architecture)是一款由阿里巴巴开源的分布式事务处理框架,设计目标是为微服务架构提供简单易用、高性能的分布式事务解决方案。它致力于解决在大规模分布式系统中...
要创建一个自治事务,您必须在匿名块的最高层或者存储过程、函数、数据包或触发的定义部分中,使用PL/SQL中的PRAGMA AUTONOMOUS_TRANSACTION语句。在这样的模块或过程中执行的SQL Server语句都是自治的。
为了解决这些问题,出现了一些新的分布式事务框架,如Seata(Simple Extensible Autonomous Transaction Architecture)。Seata旨在提供高性能和易于使用的分布式事务服务,它支持不同的事务模式,包括AT(自动补偿...
从给定的文件名com-chubin-seata-server-master来看,这个压缩包可能包含了一个名为SEATA(Simple Extensible Autonomous Transaction Architecture)的分布式事务框架的源代码或者服务端组件。SEATA是阿里巴巴开源...
Seata(Simple Extensible Autonomous Transaction Architecture)是一款专为解决分布式环境中的事务一致性问题而设计的开源框架。它致力于提供高性能和简单易用的分布式事务服务,使得开发者在微服务架构或者分布式...
Seata(Simple Extensible Autonomous Transaction Architecture)是一款开源的分布式事务解决方案,旨在提供高性能和简单易用的分布式事务服务。在微服务架构中,由于服务之间的交互变得复杂,单个数据库事务无法...
5. **分布式事务中间件Seata**:Seata(Simple Extensible Autonomous Transaction Architecture)是阿里巴巴开源的分布式事务框架,支持AT(Automatic Transaction Mode)、TCC、Saga和XA等事务模式,提供高性能和...
Seata(Simple Extensible Autonomous Transaction Architecture)是一个易于使用的高性能微服务分布式事务解决方案。Seata的设计理念是将分布式事务管理与业务系统解耦,使得开发人员可以像使用本地事务一样使用...
Seata(Simple Extensible Autonomous Transaction Architecture)是一个开源的分布式事务解决方案,它提供高性能和易用性,旨在简化微服务架构下分布式事务的实现。Seata的设计理念是通过提供简单、易用的API来实现...
Seata(Simple Extensible Autonomous Transaction Architecture)是一个开源的分布式事务解决方案,它提供高性能和易用的分布式事务服务。Seata 旨在提供简洁易懂的分布式事务解决方案,简化开发者在分布式系统中...