SELECT 関数がデータを戻さない場合、またはこれ以上データがない場合、正常な状態として処理され、SQLCODE にエラー・コードは設定されません。これは、現行ノードで「データベース・エラー時に例外をスローする」および「警告をエラーとして扱う」プロパティーが設定されているかどうかに関係ありません。
SELECT 関数がデータを戻していないことを確認するには、何が戻されたかを検査する ESQL を組み込みます。 以下のような様々なメソッドを使用できます。
この ESQL は、SELECT 関数が 1 つ以上の値を戻したか (TRUE)、それとも値を戻さなかったか (FALSE) を示すブール値を戻します。
IF EXISTS(SELECT T.MYCOL FROM Database.MYTABLE) THEN ...
SELECT に対して配列が戻されることを期待する場合は、CARDINALITY を使用して受信されたエントリーの数を計算できます。
SET OutputRoot.XMLNS.Testcase.Results[] = ( SELECT T.MYCOL FROM Database.MYTABLE) ...... IF CARDINALITY (OutputRoot.XMLNS.Testcase.Results[])> 0 THEN ........
SELECT 関数に THE または ITEM キーワードのいずれかを使用した場合は、スカラー値が戻されます。 戻された行がない場合は、値は NULL に設定されます。 ただし、値 NULL が列に含まれている可能性もあるため、これら 2 つのケースを区別したい場合もあるでしょう。
SELECT 関数に COALESCE を組み込むことによってこれらのケースを区別します。例えば、以下のようにします。
SET OutputRoot.XMLNS.Testcase.Results VALUE = THE ( SELECT ITEM COALESCE(T.MYCOL, 'WAS NULL') FROM Database.MYTABLE);
この例で文字ストリング WAS NULL が戻される場合は、戻された行がなかったのではなく、列に NULL が含まれていたことを示します。
前のリリースでは、データがない場合、またはこれ以上データがない場合は、100 の SQLCODE が設定されていました。 メッセージ・フロー内のデータベース・エラーを処理することを選択した場合は、ブローカーによって例外が出されていました。