Java から PL/SQL ストアド プロシージャを呼び出そうとすると、次のエラーが発生します。ORA-02089: COMMIT is not allowed in a subordinate session
Oracleからは問題なくテストされます。誰もこれについて経験がありますか?
この方法を試してください。
エラーについてオラクルのドキュメントは何と言っていますか:
COMMIT が、2 フェーズ コミット グローバル コーディネーターではないセッションで発行されました。
基本的に、分散トランザクションを実行しています。分散トランザクションの一部として、自律型トランザクションを呼び出そうとしています。2PC を実行するには分散トランザクションが必要なため、これは不可能です。
うーん、それはXAに関連していると思います。AUTONOMOUS_TRANSACTION プラグマでストアド プロシージャをブラケットすると、正常に動作します。
PROCEDURE foo (val IN VARCHAR2(4000)) is
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO tbl1 VALUES (val);
DELETE FROM tbl2;
COMMIT;
END foo;