尽管标准 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。 如果您没有包含该模式并且它不与您当前的用户标识相匹配,则消息流处理消息时,代理会产生一个运行时错误。
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
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 节点指派到消息中的字段。
列函数是这样一种函数,它获取表或消息的所有选定行中的单个列的值,并返回单个标量结果。