在 XML 消息中返回标量值

您可以通过同时包含 THE 和 ITEM 关键字,使用 SELECT 语句返回标量值,例如:

1 + THE(SELECT ITEM T.a FROM Body.Test.A[] AS T WHERE T.b = '123')

使用 ITEM 关键字

以下例显示用于选择一个项并创建单个值的 ITEM 关键字

SET OutputRoot.MQMD = InputRoot.MQMD;

SET OutputRoot.XML.Test.Result[] = 
      (SELECT ITEM T.UnitPrice FROM InputBody.Invoice.Purchases.Item[] AS T);

将发票消息作为输入接收时,显示的 ESQL 生成下列输出消息:

<Test>
  <Result>27.95</Result>
  <Result>42.95</Result>
  <Result>59.99</Result>
</Test>

如果指定了 ITEM 关键字,输出消息将包含一列标量值。 如果省略 ITEM 关键字,则将此消息与产生的消息进行比较,生成一个字段(名称-值对)列表:

<Test>
   <Result>
    <UnitPrice>27.95</UnitPrice>
  </Result>
   <Result>
    <UnitPrice>42.95</UnitPrice>
  </Result>
   <Result>
    <UnitPrice>59.99</UnitPrice>
  </Result>
</Test>

使用 THE 关键字的结果

THE 关键字将包含一个项的列表转换为该项本身。

前两个示例都将列表指定为 FROM 子句中 SELECT 的数据源(字段引用的末尾有 [] 表示是一个数组),因此 SELECT 通常会生成一个结果列表。所以您需要指定一个列表作为赋值的目标(因此“Result[]”将作为赋值目标)。但是,通常您知道指定为 SELECT 一部分的 WHERE 子句将只为列表中的一个项返回 TRUE。在这种情况下,请使用 THE 关键字。

下面的示例显示使用 THE 关键字的结果:

SET OutputRoot.MQMD = InputRoot.MQMD;

SET OutputRoot.XML.Test.Result = 
        THE (SELECT T.Publisher, T.Author FROM InputBody.Invoice.Purchases.Item[] 
                  AS T WHERE T.UnitPrice = 42.95);

THE 关键字意味着赋值目标成为 OutputRoot.XML.Test.Result(不允许使用“[]”)。 使用它可以生成以下输出消息:

<Test>
   <Result>
    <Publisher>Morgan Kaufmann Publishers</Publisher>
    <Author>Don Chamberlin</Author>
  </Result>
</Test>

从标量列表中选择

请参考下面的样本输入消息:

<Test>
 <A>1</A>
 <A>2</A>
 <A>3</A>
 <A>4</A>
 <A>5</A>
</Test>

如果编写下列 ESQL 语句用来处理该消息:

SET OutputRoot.XML.Test.A[] = 
    (SELECT ITEM A from InputBody.Test.A[]  
      WHERE CAST(A AS INTEGER) BETWEEN 2 AND 4);

生成下列输出消息:

      <A>2</A>
      <A>3</A>
      <A>4</A>
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ak05770_