SELECT ステートメントがデータを戻さない場合、またはこれ以上データを戻さない場合は、これは通常の状態として処理され、SQLCODE の中にエラー・コードは設定されません。 これは、現行ノードで「データベース・エラー時に例外をスローする」および「警告をエラーとして扱う」プロパティーが設定されているかどうかに関係ありません。
SELECT ステートメントがデータを戻していないことを確認するには、何が戻されたかを検査する ESQL を組み込みます。 これを行うには、以下のいくつかの方法があります。
これは、SELECT 関数が 1 つ以上の値を戻したか (TRUE)、それとも値を戻さなかったか (FALSE) を示すブール値を戻します。
IF EXISTS(SELECT T.MYCOL FROM Database.MYTABLE) THEN ...
SELECT に対して配列が戻されることを期待する場合は、CARDINALITY を使用して受信されたエントリーの数を計算できます。
SET OutputRoot.XML.Testcase.Results[] = ( SELECT T.MYCOL FROM Database.MYTABLE) ...... IF CARDINALITY (OutputRoot.XML.Testcase.Results[]) > 0 THEN ........
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 が設定されていました。 メッセージ・フロー内のデータベース・エラーを処理することを選択した場合は、ブローカーによって例外が出されていました。