引用数据库中的列

尽管标准 SQL SELECT 语法支持对于外部数据库的查询,但要注意几点。您必须以关键字 Database 作为表名的前缀以表明 SELECT 的目标是外部数据库,而不是消息中重复的结构。

数据库 SELECT 的基本格式是:

SELECT ...
  FROM Database.TABLE1
  WHERE ...

如有必要,可以指定模式名:

SELECT ...
  FROM Database.SCHEMA.TABLE1
  WHERE ...

其中 SCHEMA 是定义表 TABLE1 的模式名称。如果运行时使用的用户标识与该模式不匹配,则必须包含该模式。例如,如果您的用户标识是 USER1,Database.TABLE1 的表达式等价于 Database.USER1.TABLE1。但是,如果在数据库中与该表相关连的模式是 db2admin,您必须指定 Database.db2admin.TABLE1。 如果您没有包含该模式并且它不与您当前的用户标识相匹配,则消息流处理消息时,代理会产生一个运行时错误。

如果未指定数据源(如前两个示例中所示),则 TABLE1 必须是由节点的数据源属性源指定的缺省数据库中的表。要访问数据库中的数据而不是节点的数据源属性中指定的缺省值,您必须明确指定数据源。例如:
SELECT ...
  FROM Database.DataSource.SCHEMA.TABLE1
  WHERE ...

通过 FROM 子句,将对列名的引用限定为表名或为该表定义的相关名。因此,通常您可以执行诸如下面所示的查询:

SELECT column1, column2 FROM table1

您必须以下面两种格式中的一种来编写:

SELECT T.column1, T.column2 FROM Database.table1 AS T
 
SELECT table1.column1, table1.column2 FROM Database.table1

为了将对于数据库列的引用与对于消息中字段的任何引用(在 SELECT 中可能也会出现)分辨开来,所以这是必需的:

SELECT T.column1, T.column2 FROM Database.table1
    AS T WHERE T.column3 = Body.Field2
您可以使用 AS 子句重命名返回的列。 例如:
SELECT T.column1 AS price, T.column2 AS item
  FROM Database.table1 AS T WHERE...

在 SELECT 子句中支持标准的“select all”SQL 选项。如果您使用此选项,您必须使用为表定义的表名或相关名限定列名。例如:

SELECT T.* FROM Database.Table1 AS T

在数据库查询中使用 ESQL 过程和函数名时,它们在调用中的位置会影响这些名称的处理方式。 如果它确定过程或函数影响查询返回的结果,则它不作为 ESQL 处理并且作为数据库调用的一部分传递。

在尝试使用带有 SELECT 语句中列标识的函数或过程名时应用它。

例如,如果在 Select 子句中指定的列标识上使用 CAST 语句,则在数据库查询期间使用它以确定要为该列返回的数据的数据类型。对于该 ESQL 数据类型不执行 ESQL CAST,并且返回的数据受该数据类型的数据库交互作用的解释的影响。

如果在 WHERE 子句中指定的列标识上使用函数或过程,则这直接传递到数据库管理器以进行处理。

在后继主题中的示例说明外部数据库查询的结果集在 WebSphere Message Broker 中如何表示。数据库查询的结果使用 Compute 节点指派到消息中的字段。

列函数是这样一种函数,它获取表或消息的所有选定行中的单个列的值,并返回单个标量结果。

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