Wenn eine SELECT-Anweisung keine Daten oder keine weiteren Daten zurückgibt, wird dies als normale Situation behandelt, und in SQLCODE wird kein Fehlercode gesetzt. Dieses Verhalten ist unveränderbar; die Einstellung der Eigenschaften Ausnahme für Datenbankfehler ausgeben und Warnungen als Fehler behandeln des aktuellen Knotens wird ignoriert.
Damit erkannt wird, ob eine SELECT-Anweisung keine Daten zurückgegeben hat, müssen Sie ESQL-Code einfügen, der die zurückgegebenen Elemente überprüft. Dies kann auf mehrere Arten erfolgen:
Liefert einen Booleschen Wert, der angibt, ob eine SELECT-Funktion einen oder mehrere Werte (TRUE) oder keine Werte (FALSE) zurückgegeben hat.
IF EXISTS(SELECT T.MYCOL FROM Database.MYTABLE) THEN ...
Wenn Sie als Antwort auf eine SELECT-Funktion eine Feldgruppe erwarten, können Sie mit Hilfe von CARDINALITY berechnen, wie viele Einträge empfangen wurden.
SET OutputRoot.XML.Testcase.Results[] = ( SELECT T.MYCOL FROM Database.MYTABLE) ...... IF CARDINALITY (OutputRoot.XML.Testcase.Results[]) > 0 THEN ........
Wenn Sie in Ihrer SELECT-Anweisung die Schlüsselwörter THE oder ITEM verwendet haben, wird ein Skalarwert zurückgegeben. Wenn keine Zeilen zurückgegeben wurden, lautet der festgelegte Wert NULL. Möglicherweise enthält die Spalte jedoch den Wert NULL, und Sie möchten zwischen diesen beiden Fällen unterscheiden.
Hierfür müssen Sie in der SELECT-Anweisung COALESCE einfügen. Beispiel:
SET OutputRoot.XML.Testcase.Results VALUE = THE ( SELECT ITEM COALESCE(T.MYCOL, 'WAS NULL') FROM Database.MYTABLE);
Falls dies die Zeichenfolge WAS NULL ergibt, bedeutet dies, dass die Spalte den Wert NULL enthielt. Es bedeutet also nicht, dass keine Zeilen zurückgegeben wurden.
In früheren Releases wurde meistens der SQLCODE 100 gesetzt, wenn keine Daten oder keine weiteren Daten zurückgegeben wurden. Vom Broker wurde eine Ausnahmebedingung ausgegeben, wenn Sie sich für die Behandlung von Datenbankfehlern im Nachrichtenfluss entschieden haben.