访问多个数据库表

您可以引用在同一个数据库中创建的多个表。在 SELECT 语句中使用 FROM 子句连接两个表的数据。

下例假设您有两个数据库表 USERTABLE1 和 USERTABLE2。这两个表都有两个 char(6) 数据类型列(或与之相当的列)。

USERTABLE1 包含两行:

  Column1 Column2
Row 1 value1 value2
Row 2 value3 value4

USERTABLE2 包含两行:

  Column3 Column4
Row 1 value5 value6
Row 2 value7 value8

单个 SELECT 语句引用的所有表必须在同一个数据库中。数据库可以是缺省数据库(由节点的数据源属性指定)或另一个数据库(由 SELECT 语句的 FROM 子句指定)。

请配置您正在使用的 Compute、Filter 或 Database 节点以标识您已经在其中定义了表的数据库。例如,如果您正在使用缺省数据库,则右键单击节点,选择打开 ESQL,然后在此节点的模块中编写以下 ESQL 语句:

SET OutputRoot.XML.Test.Result[] = 
                  (SELECT A.Column1 AS FirstColumn,
                                  A.Column2 AS SecondColumn,
                                  B.Column3 AS ThirdColumn,
                                  B.Column4 AS FourthColumn
            FROM Database.USERTABLE1 AS A,
                                  Database.USERTABLE2 AS B
                      WHERE A.Column1 = 'value1' AND
                                  B.Column4 = 'value8'
         ); 

这些语句会生成以下输出消息内容:

<Test>
   <Result>
    <FirstColumn>value1</FirstColumn>
    <SecondColumn>value2</SecondColumn>
    <ThirdColumn>value7</ThirdColumn>
    <FourthColumn>value8</FourthColumn>
  </Result>
</Test>

上述示例显示了如何从两个数据库表访问数据。您可以编写更多的复合 FROM 子句用来访问多个数据库表(虽然所有的表都必须在同一个数据库中)。您还可以引用一个或多个消息树,并使用 SELECT 将表和表、消息和消息或表和消息连接起来。从 XML 消息和数据库表中连接数据 提供如何将消息数据与数据库表中的数据合并起来的示例。

(由节点的数据源属性定义)。

如果在 WHERE 子句的列标识上指定了 ESQL 函数或过程,则将它们作为数据库查询的一部分而不是作为 ESQL 来处理。

请参阅以下示例:

  SET OutputRoot.XML.Test.Result = 
     THE(SELECT ITEM T.Column1 FROM Database.USERTABLE1 AS T
          WHERE UPPER(T.Column2) = 'VALUE2');

它尝试返回行,行中 Column2 的值转换为大写的 VALUE2。不过只有数据库管理器才能决定任何给定行的 T.Column2 值,因此在发出数据库查询之前,ESQL 无法处理它,因为 WHERE 子句决定返回到消息流的行。

因此,UPPER 传递到数据库管理器作为它的处理的一部分。但是如果数据库管理器无法处理 select 语句中的令牌,将返回错误。

相关概念
消息流概述
ESQL 概述
消息建模
相关任务
设计消息流
定义消息流内容
管理 ESQL 文件
从 XML 消息和数据库表中连接数据
相关参考
Compute 节点
Database 节点
Filter 节点
ESQL 引用
SELECT 函数
SET 语句
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ak05830_