如果 SELECT 语句不返回任何数据,或不返回进一步的数据,则会将此作为普通情况处理,不在 SQLCODE 中设置任何错误代码。无论当前节点上的发生数据库错误时抛出异常和将警告作为错误处理属性设置是什么,都会发生这种情况。
要识别 SELECT 语句是否没有返回任何数据,请包含检查返回内容的 ESQL。可以通过许多方法执行此操作:
此方法将返回一个布尔值,表明 SELECT 函数是返回一个或多个值(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 也可能包含在列中,而且您可能想区分这两种情况。
为此,请在 SELECT 语句中包含 COALESCE,例如:
SET OutputRoot.XML.Testcase.Results VALUE = THE ( SELECT ITEM COALESCE(T.MYCOL, 'WAS NULL') FROM Database.MYTABLE);
如果此语句返回字符串 WAS NULL,则表示列包含 NULL,而不是没有返回任何行。
在前发行版中,如果没有返回任何数据或没有进一步的数据,则在大多数情况下,SQLCODE 被设置为 100。如果您选择了处理消息流中的数据库错误,则代理将发生异常。