从数据库列中选择数据

您可以配置 Compute、Filter 或 Database 节点以从数据库列中选择数据并在输出消息中包括它。下例假设您有一个数据库表 USERTABLE,它有两个 char(6) 数据类型的列(或与之相当的列),名为 Column1 和 Column2。该表包含两行:

  Column1 Column2
Row 1 value1 value2
Row 2 value3 value4

配置Compute、Filter 或 Database 节点以标识您已经在其中定义该表的数据库。例如,如果您使用缺省数据库(在节点的数据源属性上指定),右键单击节点,选择打开 ESQL,然后在本节点的模块中编写以下 ESQL 语句:

SET OutputRoot = InputRoot;
DELETE FIELD OutputRoot.*[<];
SET OutputRoot.XML.Test.Result[] = 
    (SELECT T.Column1, T.Column2 FROM Database.USERTABLE AS T);

这会产生以下输出消息:

<Test>
    <Result>
      <Column1>value1</Column1>
      <Column2>value2</Column2>
   </Result>
    <Result>
      <Column1>value3</Column1>
      <Column2>value4</Column2>
   </Result>
</Test>
要触发 SELECT,则发送具有以下格式的 XML 主体的触发器消息:
<Test>
    <Result>
      <Column1></Column1>
      <Column2></Column2>
   </Result>
    <Result>
      <Column1></Column1>
      <Column2></Column2>
   </Result>
</Test>

XML 的确切结构并不重要,但包围它的标记必须是 <Test> 以与 ESQL 中的引用相匹配。如果不是,则 ESQL 语句会导致形成顶级包围标记,它不是有效的 XML。

如果您要创建一个输出消息,该消息包含满足特定条件的所有行的所有列,则使用带有 WHERE 子句的 SELECT 语句:

-- Declare and initialize a variable to hold the 
--      test vaue (in this case the surname Smith)
DECLARE CurrentCustomer STRING 'Smith';

-- Loop through table records to extract matching information
SET OutputRoot.XML.Invoice[] =
        (SELECT R FROM Database.USERTABLE AS R
                            WHERE R.Customer.LastName = CurrentCustomer
    );

消息字段以与表中列出现相同的顺序创建。

如果您熟悉数据库环境中的 SQL,则可能需要对 SELECT * 进行编码。由于您必须启动所有到带有相关名称的列的引用,代理不接受这个。 这避免了所声明变量的含糊。 另外,如果您对 SELECT I.* 进行编码,则代理接受它,但是 * 被解释为首个子元素,而不是您所要求的来自其他数据库 SQL 的所有元素。

从区分大小写的数据库系统中的表选择数据

如果数据库系统区分大小写,您必须使用备用方法。如果要为生成的字段更改名称,也必须使用此方法:

SET OutputRoot = InputRoot;
SET OutputRoot.XML.Test.Result[] = 
    (SELECT T.Column1 AS Column1, T.Column2 AS Column2
    FROM Database.USERTABLE AS T);

此示例产生和以上示例相同的消息。确保以正确的大小写指定到数据库列(在该示例中,是 T.Column1 和 T.Column2)的引用,从而与数据库定义完全匹配。 如果您没有这样做,例如,您指定 T.COLUMN1,则代理生成运行时错误。 注意 SELECT 语句中的 Column1Column2 的使用。在此您可以使用任何值,它们不需要象本示例中的那样与您在数据库中定义的列名相匹配。

声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ak05810_