AUTONOMOUS_TRANSACTION
プラグマは、ルーチンを自律型(メイン・トランザクションから独立している)とマークします。
このコンテキストでは、ルーチンは次のいずれかになります。
トップレベル(ネストしていない)の無名PL/SQLブロック
スタンドアロン・サブプログラム、パッケージ・サブプログラムまたはネストしたサブプログラム
SQLオブジェクト型のメソッド
データベース・トリガー
自律型ルーチンが起動されると、メイン・トランザクションは停止します。 自律型トランザクションは、メイン・トランザクションから完全に独立しています。ロック、リソースまたはコミット依存関係を共有することはありません。 自律型トランザクションはメイン・トランザクションに影響を与えません。
自律型トランザクションによって行われた変更は、自律型トランザクションがコミットすると、他のトランザクションから参照できるようになります。 分離レベルがREAD
COMMITTED
(デフォルト)に設定されている場合にのみ、メイン・トランザクションが再開すると、これらの変更をメイン・トランザクションから参照できるようになります。
構文
autonomous_transaction_pragma ::=
キーワードとパラメータの説明
PRAGMA
文がプラグマ(コンパイラ・ディレクティブ)であることを表します。 プラグマは、実行時ではなくコンパイル時に処理されます。 プラグマは、コンパイラに情報を渡します。
AUTONOMOUS_TRANSACTION
ルーチンが自律型であることを示します。
使用上の注意
このプラグマは、パッケージ全体には適用できませんが、パッケージ内の各サブプログラムには適用できます。
このプラグマは、オブジェクト型全体には適用できませんが、SQLオブジェクト型の各メソッドには適用できます。
通常のトリガーとは異なり、自律型トリガーにはCOMMIT
やROLLBACK
などのトランザクション制御文を含めることができます。また、自律トリガーではEXECUTE
IMMEDIATE
文を使用してDDL文(CREATE
やDROP
など)を発行できます。
メイン・トランザクション内で、自律型サブプログラムをコールする前にマークされたセーブポイントまでロールバックしても、自律型トランザクションはロールバックされません。 自律型トランザクションは、メイン・トランザクションからは完全に独立していることに注意してください。
メイン・トランザクション(自律型ルーチンの終了まで再開できない)が保持するリソースに、自律型トランザクションがアクセスしようとすると、デッドロックが発生します。 この場合は、データベースによって自律型トランザクションで例外が呼び出されます。例外が未処理になった場合、自律型トランザクションはロールバックされます。
コミットまたはロールバックせずにアクティブな自律型トランザクションを終了しようとすると、データベースによって例外が呼び出されます。 例外が未処理になった場合、またはその他の未処理例外が発生してトランザクションが終了した場合、トランザクションはロールバックされます。
自律型トランザクションがオープンされている間は、自律型ルーチン内でPIPE
ROW
文を実行することはできません。 You must close the autonomous transaction before executing the PIPE
ROW
statement. この処理は通常、PIPE
ROW
文を実行する前に自律型トランザクションをコミットまたはロールバックすることによって行います。
関連トピック