10

Java から PL/SQL ストアド プロシージャを呼び出そうとすると、次のエラーが発生します。ORA-02089: COMMIT is not allowed in a subordinate session

Oracleからは問題なくテストされます。誰もこれについて経験がありますか?

4

3 に答える 3

13

この方法を試してください。

  • Non-XA を使用するようにデータ ソースを変更します ([Supports Global Transactions] および [Emulate Two-Phase Commit] ボタンをオンにします)。
  • コードから COMMIT を削除します。
  • 「PRAGMA AUTONOMOUS_TRANSACTION」を使用します。これにより、コミットを使用できる別のトランザクションが作成されます。例: CREATE PROCEDURE XXX AS PRAGMA AUTONOMOUS_TRANSACTION; 始めて…</li>
于 2012-08-14T05:06:59.463 に答える
4

エラーについてオラクルのドキュメントは何と言っていますか:

COMMIT が、2 フェーズ コミット グローバル コーディネーターではないセッションで発行されました。

基本的に、分散トランザクションを実行しています。分散トランザクションの一部として、自律型トランザクションを呼び出そうとしています。2PC を実行するには分散トランザクションが必要なため、これは不可能です。

于 2012-08-14T04:58:17.650 に答える
0

うーん、それは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;
于 2012-08-13T14:22:52.997 に答える