要创建一个自治事务,您必须在匿名块的最高层或者存储过程、函数、数据包或触发的定义部分中,使用PL/SQL中的PRAGMA AUTONOMOUS_TRANSACTION语句。在这样的模块或过程中执行的SQL Server语句都是自治的。 触发无法包含COMMIT语句,除非有PRAGMA AUTONOMOUS_TRANSACTION标记。但是,只有触发中的语句才能被提交,主事务则不行。
pragma autonomous_transaction是一个用于创建独立事务的特殊SQL语句。每个pragma autonomous_transaction可以包含多个SQL语句,这些语句将在一个独立的事务中执行。与常规的事务不同,pragma autonomous_transaction不受外部事务的提交或回滚的影响。这意味着,无论外部事务的结果如何,pragma autonomous_transaction始终能够独立地完成...
对数据库有写操作(INSERT、UPDATE、DELETE、CREATE、ALTER、COMMIT)的存储过程或函数是无法简单的用SQL来调用的,此时可以将其设为自治事务,从而避免ORA-14552(无法在一个查询或DML中执行DDL、COMMIT、ROLLBACK)、ORA-14551(无法在一个查询中执行DML操作)等错误。需要注意的是函数必须有返回值,但仅有IN参数(不能有OU...
对数据库有写操作(update,insert,delete,crate,alert,commit)的函数是无法简单的用SQL来调用的。 如何实现?关键是pragma autonomous_transaction 如下例子: SQL> Create or replace function func_getid return int is 2 pragma autonomous_transaction; 3 vid int; 4 begin 5 select max(id) into vid from test_...
Oracle中的PRAGMA AUTONOMOUS_TRANSACTION详解 1. 解释什么是Oracle中的PRAGMA AUTONOMOUS_TRANSACTION Oracle中的PRAGMA AUTONOMOUS_TRANSACTION是一个编译器指令,用于将一个PL/SQL块或例程(如过程、函数)标记为自治事务。自治事务是一个独立于其调用者(父事务)的事务,它可以独立地提交或回滚自己的更改,而不会影响到父事...
PRAGMA AUTONOMOUS_TRANSACTION; 以下SPL程序可包含 PRAGMA AUTONOMOUS_TRANSACTION: 独立的存储过程和函数。 匿名块。 包中声明为子程序的存储过程和函数以及其他调用存储过程、函数和匿名块。 触发器。 对象类型方法。 下面是与自治事务有关的问题和限制:
SQL> Next, we insert another 8 rows using an anonymous block declared as an autonomous transaction, which contains a commit statement. 下一步,我们使用匿名的自治事务块插入另外8行数据,同时提交。 DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN FOR i IN 3 .. 10 LOOP INSERT INTO at_test (id, descr...
语法 在语句声明部分 declare ,加⼊下列语句即可 pragma autonomous_transaction ; 1.1事务图⽰ 2⽰例:错误⽇志 基础数据准备: --创建学⽣信息表 create table scott .stu_info ( id number (10) constraint pk_sut_info_id primary key, name varchar2 (30), sex varchar2 (2) ); --创建⽇...
自治事务pragma autonomous_transaction的使用场景(2、触发器) 除了用于记录日志,自治事务pragmaautonomous_transaction另一个常用的使用场景是在触发器里。 下面是我在某个工作流系统中创建的触发器,目的是触发在申请人的流程被下一环节受理时、以及流程被退回时提取相关信息发送短信提醒。 此时,我在前台进行操作后,收到...
PRAGMA AUTONOMOUS_TRANSACTION中文翻译过来叫“自治事务”(翻译的还算好理解),对于定义成自治事务的Procedure,实际上相当于一段独立运行的程序段,这段程序不依赖于主程序,也不干涉主程序 自治事务的特点 第一,这段程序不依赖于原有Main程序,比如Main程序中有未提交的数据,那么在自治事务中是查找不到的。