このようなコミットをプログラムに加える効果は?あなたの現在のトランザクションを終了し、トランザクションで実行 恒久的なすべての変更を行うことがCOMMIT
文を使用し
目的
:
Oracle DocumentationはとしてCOMMIT
を説明しています。トランザクションは、 という一連のSQL文で、Oracle Databaseは単一の 単位として扱います。このステートメントは、トランザクション内のすべてのセーブポイントも消去し、 はトランザクションロックを解放します。
あなたは3 PROCEDURE
があり、それぞれがCOMMIT
文が含まれている場合は、例外が後者で発生した場合、最初の2からの変更は、すでにCOMMIT
テッドになるように、あなたはそれらをすべて、そしてROLLBACK
を3つすべてを実行することはできません。一般的なルールとして
、あなたははPROCEDURE
またはFUNCTION
でCOMMIT
を使うべきではありませんが、彼らは一緒に複数のアクションをバンドルすることができるようにトランザクションをCOMMIT
するために呼び出し側に任せるべきです。
もちろん、このルールに違反したい場合もありますが、このルールを破る前にビジネスロジックを完全に理解するためには、それぞれのケースを個別に検討し、時間を取るべきです。したがって、それぞれにCOMMIT
インスタンス。
AUTONOMOUS_TRANSACTION
としてこの取引を行う必要がありますか?あなたは、ユーザーのアクションをログに記録する別のPROCEDURE
を呼び出すと、関係なく、最初のアクションが成功したかどうかにあなたが行動のログを保存し、それを確実にしたい失敗しPROCEDURE
を有することができる -
つのユースケースは、ログインしていますログはCOMMIT
です。この場合、ログPROCEDURE
はAUTONOMOUS_TRANSACTION
であり、COMMIT
ステートメントが含まれていて、呼び出しステートメントには(おそらく)あるべきではありません。 COMMIT
PROCEDURE
1のが常に必要とされている場合
ので、呼び出し側COMMIT
の他のデータは、その後PROCEDURE
AUTONOMOUS_TRANSACTION
を作るかどうかとは無関係です。 PROCEDURE
を一緒にバンドルしてからROLLBACK
をグループにまとめると、AUTONOMOUS_TRANSACTION
にする必要はありません。
出典
2017-02-02 09:50:51
MT0
これはリンクのみの回答です。答えにリンクされた記事の関連ポイントを含める方が良いでしょう。 – MT0
また、自律型トランザクションは誤用しやすいです。適切なシナリオがあることがわかっていない限り、人々に使用を勧めるべきではありません。ここではそうではありません。 – APC