簡體   English   中英

Oracle ORA-02089與Java

[英]Oracle ORA-02089 with Java

嘗試從Java調用PL / SQL存儲過程時出現以下錯誤: ORA-02089: COMMIT is not allowed in a subordinate session

它可以從Oracle測試得很好。 有人對這個有經驗么?

嘗試這種方式;

  • 更改數據源以使用非XA(並選中“支持全局事務”和“模擬兩階段提交”按鈕)
  • 從代碼中刪除COMMIT。
  • 使用“PRAGMA AUTONOMOUS_TRANSACTION”。 這將創建一個允許使用commit的單獨事務。例如: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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM