ExceptionList ツリーには独自の相関名 ExceptionList があり、このツリーの内容を参照または設定するすべての ESQL ステートメントではこの名前を使用する必要があります。
入力メッセージが構文解析される際に、論理ツリーと共にこのツリーが作成されます。 最初は空になっていて、メッセージ・フロー処理中に例外が発生する場合にのみ移植されます。 複数の例外が生じる可能性もあります。その場合には、ExceptionList ツリーには、各例外のサブツリーが含まれます。
Compute、Database、および Filter ノードで ExceptionList ツリーにアクセスでき、Compute ノードでは更新することもできます。 適切な相関名を使用する必要があります。 Database ノードまたは Filter ノードに対しては例外リスト、Compute ノードに対しては InputExceptionList を使用します。
エラー処理プロシージャーにおいて、あるノードでこのツリーにアクセスしたい場合があるかもしれません。 たとえば、例外のタイプに応じて異なるパスにメッセージの経路を定めたい場合もあります。 あるものは ESQL THROW ステートメントを使用して明示的に生成し、別のものはブローカーが生成するなどという例を挙げることができます。
次の ESQL は、ExceptionList にアクセスし、含まれるそれぞれの子を処理する方法を示しています。
-- Declare a reference for the ExceptionList -- (in a Compute node use InputExceptionList) DECLARE start REFERENCE TO ExceptionList.*[1]; -- Loop through the exception list children WHILE start.Number IS NOT NULL DO -- more ESQL -- Move start to the last child of the field to which it currently points MOVE start LASTCHILD; END WHILE;
下記の 2 番目の例は ESQL からの抽出です。 これは Compute ノード用にコーディングされ、最後の (ネストされた) 例外記述まで例外リストをループ走査し、エラー番号を抽出します。 このエラーは問題の根本原因に関係しており、ほとんどの場合に最も正確な情報を提供します。 この方法で取得したエラー番号に基づき、メッセージ・フローがこの後にどんなアクションを取るかを決定できます。
-- Declare variable for the Error number extracted from exception list DECLARE Error INTEGER; -- Declare current path within the exception list DECLARE Path CHARACTER; -- Start at first child of exception list SET Path = 'InputExceptionList.*[1]'; -- Loop until no more children WHILE EVAL( 'FIELDNAME(' || Path || ') IS NOT NULL' ) DO -- Check if error number is available IF EVAL( 'FIELDNAME(' || Path || '.Number) IS NOT NULL' ) THEN -- Record only the deepest error number SET Error = EVAL( Path || '.Number' ); END IF; -- Step to last child of current element (usually a nested exception list SET Path = Path || '.*[<]'; END WHILE;
ExceptionList の使用に関する詳細は、エラー・ハンドラー (Error Handler) サンプルのサブフローを参照してください。そのサブフローには、ExceptionList 構造に問い合わせてその内容に応じて特定のアクションを実行する ESQL が組み込まれています。