ORACLE PRAGMA AUTONOMOUS_TRANSACTION 自治事务 单独提交某一段操作
个人使用示例:
CREATE OR REPLACE PROCEDURE logs(p_remark VARCHAR2,
p_log CLOB) AS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
--数据操作
COMMIT;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
自治事务是由调用程序启动的独立事务。自治事务中SQL命令的提交或回滚对调用程序的任何事务中的提交或回滚都没有影响。调用程序中的提交或回滚对自治事务中SQL命令的提交或回滚也没有影响。
通过在SPL块的声明部分中指定以下指令,可将SPL程序声明为自治事务:
PRAGMA AUTONOMOUS_TRANSACTION;
以下SPL程序可包含 PRAGMA AUTONOMOUS_TRANSACTION:
- 独立的存储过程和函数。
- 匿名块。
- 包中声明为子程序的存储过程和函数以及其他调用存储过程、函数和匿名块。
- 触发器。
- 对象类型方法。
下面是与自治事务有关的问题和限制:
- 每个自治事务只要在进行中,就会消耗一个连接槽。在某些情况下,这可能意味着应增大postgresql.conf文件中的max_connections参数。
- 在大多数方面,自治事务的行为就像是一个完全独立的会话,但GUC(即通过SET建立的设置)是一个有意制造的例外。自治事务吸收周围的值,并可以将它们提交的值传播到外部事务。
- 自治事务可以嵌套,但在单个会话中自治事务的嵌套级别限制为16级。
- 自治事务中不支持并行查询。
- 自治事务的PolarDB-O实现与Oracle数据库不完全兼容,因为如果SPL块末尾有未提交的事务,则PolarDB-O自治事务不会产生错误。
资料来源:PRAGMA AUTONOMOUS_TRANSACTION_事务控制_开发存储过程_开发指南_PolarDB-O 云原生数据库 - 阿里云 (aliyun.com)