您可以通过同时包含 THE 和 ITEM 关键字,使用 SELECT 语句返回标量值,例如:
1 + THE(SELECT ITEM T.a FROM Body.Test.A[] AS T WHERE T.b = '123')
以下例显示用于选择一个项并创建单个值的 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 关键字将包含一个项的列表转换为该项本身。
前两个示例都将列表指定为 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>