oracle - 如何在 Oracle PLSQL 中提交单个事务

标签 oracle plsql transactions

我需要编写一个 PL/SQL 过程,在这个过程中,我需要在其自己的事务范围内调用另一个过程,并提交它,无论主事务是否失败或提交。换句话说,我需要类似 REQUIRES NEW 事务传播的东西。

类似于:

procedure mainProcedure(arugements) is 
begin
    // some statements
    nestedProcedure(someArguments);
    // some other statements
end;

procedure nestedProcedure(arguments) is
begin
  // start a new transaction
  // some statements, lock some objects!
  // commit the new transaction and release locked objects
end;

我怎样才能实现这个目标?

最佳答案

看看Autonomous transation 。另请参阅演示

CREATE TABLE t (
 test_value VARCHAR2(25));

CREATE OR REPLACE PROCEDURE child_block IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
   INSERT INTO t
   (test_value)
   VALUES
   ('Child block insert');
  COMMIT; 
END child_block;
 /

CREATE OR REPLACE PROCEDURE parent_block IS

BEGIN
   INSERT INTO t
   (test_value)
   VALUES
   ('Parent block insert');

    child_block;

    ROLLBACK; 
END parent_block;
 /

执行:

 -- empty the test table
    TRUNCATE TABLE t;

   -- run the parent procedure
     exec parent_block;

   -- check the results
    SELECT * FROM t; 

关于oracle - 如何在 Oracle PLSQL 中提交单个事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42107629/

相关文章:

sql - 连接 sql 查询的结果

oracle - 解锁oracle 12c数据库中的账户

oracle - 为什么 View 列的类型与相应的函数结果类型不匹配?

php - pg_prepare : cannot insert multiple commands into a prepared statement

mysql - 在 Rails 中的多个数据库之间切换而不中断事务

Oracle 开发人员工具 (ODT) 和 Visual Studio 集成

java - 如何在结果集中循环遍历 Java JDBC 程序中的经典分页查询

sql - 有没有办法在 Oracle 数据库中创建自动递增的 Guid 主键?

sql - 像Hashmap这样的PL/SQL数据结构

sql-server - SQL Server 中嵌套事务的隔离范围是什么?