02089 with Java

I'm getting the following error when trying to call a PL/SQL stored procedure from Java: ORA-02089: COMMIT is not allowed in a subordinate session

It tests fine from Oracle. Does anyone have any experience with this?


Try this ways;

  • Change the data source to use Non-XA (and check the “Supports Global Transactions” & “Emulate Two-Phase Commit” buttons)
  • Delete the COMMIT from your code.
  • Use the “PRAGMA AUTONOMOUS_TRANSACTION“. This will kind of create a separate transaction that will allow to use a commit.For example:CREATE PROCEDURE XXX AS PRAGMA AUTONOMOUS_TRANSACTION; BEGIN …

  • What does the oracle documentation say about the error:

    COMMIT was issued in a session that is not the two-phase commit global coordinator.

    Basically you are executing a distributed transaction. As part of a distributed transaction you are trying to invoke an autonomous transaction. This is not possible as distributed transactions are required to do a 2PC.


    Hmm, I think it's related to XA. It works fine when I bracket the stored procedure with 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/6296.html

    上一篇: 搜索日期和时间在oracle中使用

    下一篇: 02089与Java