ブローカーが外部データベースにアクセスしたときにエラーが発生した場合は、ノード処理中にブローカーに例外をスローさせるか、または、ESQL ステートメントを使用してノード自体内で例外を処理することができます。
ノード処理中にブローカーに例外をスローさせることはデフォルトのアクションです。現行ノードでの ESQL 処理を中止します。 その場合、エンクロージング・キャッチ・ノードまたはメッセージ・フローの入力ノードに到達するまで、例外がメッセージ・フローの逆方向に伝搬します。 例外が入力ノードに到達すると、アクティブなトランザクションはロールバックされます。
ESQL ステートメントを使用してノード自体内で例外を処理することは、データベース戻りコード、およびエラーが生じた場合に取られるアクションの論理推移についての知識を必要とします。 このインライン・データベース・エラー処理を使用可能にするためには、Filter、Database、または Compute ノードの「データベース・エラーの際に例外をスローする」プロパティーをクリアしなければなりません。 このプロパティーをクリアすると、ノードは例外をスローする代わりに、データベース・マネージャーからデータベース状態標識 (SQLCODE、SQLSTATE、SQLNATIVEERROR、および SQLERRORTEXT) に適切な情報を入れます。
「警告をエラーとして処理」プロパティーを選択しない限りは、 標識に情報が入るのは、エラー (または警告) が生じたときだけです。 データベース操作が成功した場合や、情報と共に成功を返した場合には、それぞれのデフォルトの成功値が標識に含まれます。
これらの標識に含まれる値を ESQL ステートメントで使用して、取るべきアクションについて決定することができます。 これらの標識には、SQLCODE、SQLSTATE、SQLNATIVEERROR、および SQLERRORTEXT 関数を使用してアクセスできます。
インライン・エラー処理を試行している場合、それぞれのデータベース・ステートメントが実行された後で状態標識を調べ、すべてのエラーをキャッチしてアクセスします。 標識の処理時に、インラインで処理できないエラーを検出した場合には、新規の例外を出して、それをキャッチ・ノードにおいて「アップストリーム」で処理するか、または入力ノードに送って、ESQL THROW ステートメントを使用できるトランザクションをロールバックできます。
SELECT がデータを全く戻さないという特殊なケースをチェックしたい場合もあります。 この状態はエラーとは見なされず、SQLCODE も設定されないので、明示的にテストを実行する必要があります。SELECT への戻り値の検査 を参照してください。
以下の ESQL 例では、これら 4 つのデータベース状態関数の使用方法および例外で戻されるエラー情報を組み込む方法を示します。
DECLARE SQLState1 CHARACTER;
DECLARE SQLErrorText1 CHARACTER;
DECLARE SQLCode1 INTEGER;
DECLARE SQLNativeError1 INTEGER;
-- 存在しない表へのデータベース挿入を行う --
INSERT INTO Database.DB2ADMIN.NONEXISTENTTABLE (KEY,QMGR,QNAME)
VALUES (45,'REG356','my TESTING 2');
-- データベース戻りコードを取得する --
SET SQLState1 = SQLSTATE;
SET SQLCode1 = SQLCODE;
SET SQLErrorText1 = SQLERRORTEXT;
SET SQLNativeError1 = SQLNATIVEERROR;
-- THROW ステートメントを使用して、データベースをバックアウトし、ユーザー例外を送出する --
THROW USER EXCEPTION MESSAGE 2950 VALUES
( 'The SQL State' , SQLState1 , SQLCode1 , SQLNativeError1 ,
SQLErrorText1 );
データベース・エラーが検出された場合、例外をスローする必要はありません。ローカル環境ツリーに戻されるエラー情報を保管し、保管された値に基づいて、エラー・サブフローまたは成功サブフローへとメッセージを導くように、メッセージ・フローに Filter ノードを組み込むこともできます。
サンプルに関する情報は、WebSphere® Message Broker Toolkit に統合されているインフォメーション・センター、またはオンライン・インフォメーション・センターを使用する場合にのみ表示できます。 サンプルは、WebSphere Message Broker Toolkit に統合されているインフォメーション・センターを使用する場合にのみ実行できます。