SELECT への戻り値の検査

SELECT ステートメントがデータを戻さない場合、またはこれ以上データを戻さない場合は、これは通常の状態として処理され、SQLCODE の中にエラー・コードは設定されません。 これは、現行ノードで「データベース・エラー時に例外をスローする」および「警告をエラーとして扱う」プロパティーが設定されているかどうかに関係ありません。

SELECT ステートメントがデータを戻していないことを確認するには、何が戻されたかを検査する ESQL を組み込みます。 これを行うには、以下のいくつかの方法があります。

  1. EXISTS

    これは、SELECT 関数が 1 つ以上の値を戻したか (TRUE)、それとも値を戻さなかったか (FALSE) を示すブール値を戻します。

    IF EXISTS(SELECT T.MYCOL FROM Database.MYTABLE) THEN
    ...
  2. CARDINALITY

    SELECT に対して配列が戻されることを期待する場合は、CARDINALITY を使用して受信されたエントリーの数を計算できます。

    SET OutputRoot.XML.Testcase.Results[] = (
        SELECT T.MYCOL FROM Database.MYTABLE)
    ......
    IF CARDINALITY (OutputRoot.XML.Testcase.Results[]) > 0 THEN
    ........
  3. IS NULL

    SELECT ステートメントに THE または ITEM キーワードのいずれかを使用した場合は、スカラー値が戻されます。 戻された行がない場合は、値は NULL に設定されます。 ただし、値 NULL が列に含まれている可能性もあるため、これら 2 つのケースを区別したい場合もあるでしょう。

    区別する場合は、次のようにして SELECT ステートメントに COALESCE を組み込みます。

    SET OutputRoot.XML.Testcase.Results VALUE = THE (
       SELECT ITEM COALESCE(T.MYCOL, 'WAS NULL')
       FROM Database.MYTABLE);

    文字ストリング WAS NULL が戻される場合は、戻された行がなかったのではなく、列に NULL が含まれていたことを示します。

前のリリースでは、データがない場合、またはこれ以上データがない場合は、100 の SQLCODE が設定されていました。 メッセージ・フロー内のデータベース・エラーを処理することを選択した場合は、ブローカーによって例外が出されていました。

関連概念
メッセージ・フローの概要
ExceptionList ツリー構造
ESQL の概要
メッセージのモデル化
関連タスク
メッセージ・フローの設計
メッセージ・フローの内容の定義
メッセージ・フローのエラー処理
ESQL ファイルの管理
関連資料
Compute ノード
Database ノード
Filter ノード
ESQL 参照
SET ステートメント
ESQL の単純な比較演算子
CARDINALITY 関数
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ac17020_