02089与Java

在尝试从Java调用PL / SQL存储过程时遇到以下错误: ORA-02089: COMMIT is not allowed in a subordinate session

它从Oracle测试得很好。 有人对这个有经验么?


尝试这种方式;

  • 将数据源更改为使用非XA(并检查“支持全局事务”和“模拟两阶段提交”按钮)
  • 从代码中删除COMMIT。
  • 使用“PRAGMA AUTONOMOUS_TRANSACTION”。 这将创建一个单独的事务,允许使用提交。例如:CREATE PROCEDURE XXX AS PRAGMA AUTONOMOUS_TRANSACTION; 开始 …

  • oracle文档对错误说了些什么:

    COMMIT是在一个不是两阶段承诺全球协调员的会议上发布的。

    基本上你正在执行一个分布式事务。 作为分布式事务的一部分,您尝试调用自治事务。 这是不可能的,因为分布式事务需要做2PC。


    嗯,我认为这与XA有关。 当我使用AUTONOMOUS_TRANSACTION Pragma对存储过程进行括括时它工作正常:

    PROCEDURE foo (val IN VARCHAR2(4000)) is
      PRAGMA AUTONOMOUS_TRANSACTION;
      BEGIN
      INSERT INTO tbl1 VALUES (val);
      DELETE FROM tbl2;
      COMMIT;
    END foo;
    
    链接地址: http://www.djcxy.com/p/6295.html

    上一篇: 02089 with Java

    下一篇: Converting Date value TO