XA_END関数は、現在のセッションとxidで指定されたトランザクション分岐の関連付けを解除するために使用されます。
制御スレッドが完了した場合、またはトランザクション分岐上のトランザクションを一時停止する必要がある場合、トランザクションマネージャーはXA_ENDを呼び出します。アプリケーションがその作業の一部または全部を完了した場合(例えば、他の制御スレッドが分岐上で動作できるように特定のイベントをブロックする操作の前など)、XA_ENDが呼び出されます。XA_ENDが正常に戻り値を返した後、制御呼び出しスレッドは分岐と有効に関連付けられなくなりますが、分岐自体は依然として存在します。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
構文
DBMS_XA.XA_END (
xid IN DBMS_XA_XID,
flag IN PLS_INTEGER)
RETURN PLS_INTEGER;
パラメータの説明
| パラメータ | 説明 |
|---|---|
| xid | DBMS_XA_XID オブジェクトタイプを参照してください。 |
| flag | XA_START関数とXA_END関数のflagフィールドで使用される定数を参照してください。 |
戻り値
DBMS_XAの可能な定数戻り値を参照してください。
返される可能性のあるエラーコードは次のとおりです:XAER_RMERR, XAER_RMFAILED, XAER_NOTA, XAER_INVAL, XAERPROTO または XA_RB\*。
使用方法
flagにTMSUCCESSまたはTMSUSPENDを指定できます。戻り値がXA_OKの場合、トランザクション分岐は現在分離状態のセッションから解除されます。TMFAILはサポートされていません。TMSUCCESSまたはTMSUSPENDを使用してXA_ENDを呼び出すことで、xidで識別されるトランザクション分岐を現在のセッションから解除できます。XA_ENDの実行が成功した場合、XA_OKが返されます。アプリケーションは戻り値をチェックし、エラー状況を処理する必要があります。アプリケーションは、XA_OKが返された場合にのみ、他の通常の操作を続行する必要があります。XA_ENDを呼び出す前にROLLBACKステートメントを実行すると、現在のトランザクションによって行われた変更がロールバックされます。ただし、XA_ENDを呼び出す前に、トランザクションコンテキストは引き続き現在のセッションに関連付けられています。XA_ENDを呼び出す前にCOMMITステートメントを実行すると、OBE-02089:従属セッションではCOMMITが許可されていませんというエラーが報告されます。XA_ENDの後にCOMMITまたはROLLBACKステートメントを実行しても、xidで識別されるトランザクションには影響しません。このトランザクションは現在のセッションとは関連付けられていないためです。トランザクションIDをコミットするか、XA_ROLLBACK関数を使用して、xidで指定されたトランザクションをコミット/ロールバックします。