检查 SELECT 的返回

如果 SELECT 语句不返回任何数据,或不返回进一步的数据,则会将此作为普通情况处理,不在 SQLCODE 中设置任何错误代码。无论当前节点上的发生数据库错误时抛出异常将警告作为错误处理属性设置是什么,都会发生这种情况。

要识别 SELECT 语句是否没有返回任何数据,请包含检查返回内容的 ESQL。可以通过许多方法执行此操作:

  1. EXISTS

    此方法将返回一个布尔值,表明 SELECT 函数是返回一个或多个值(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 也可能包含在列中,而且您可能想区分这两种情况。

    为此,请在 SELECT 语句中包含 COALESCE,例如:

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

    如果此语句返回字符串 WAS NULL,则表示列包含 NULL,而不是没有返回任何行。

在前发行版中,如果没有返回任何数据或没有进一步的数据,则在大多数情况下,SQLCODE 被设置为 100。如果您选择了处理消息流中的数据库错误,则代理将发生异常。

相关概念
消息流概述
ExceptionList 树结构
ESQL 概述
消息建模
相关任务
设计消息流
定义消息流内容
处理消息流中的错误
管理 ESQL 文件
相关参考
Compute 节点
Database 节点
Filter 节点
ESQL 引用
SET 语句
ESQL 简单比较运算符
CARDINALITY 函数
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ac17020_