DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的最佳实践,第 3 部分:如何高效并有效率的查询 XML 数据
2009-11-12 00:00:00 来源:WEB开发网查询结果是:
TRADEID SYMBOL PRINCIPAL_VALUE_USD
----------- ------ ------------------------
790 EUR +3.65000000000000E+007
791 EUR +7.30000000000000E+007
789 GBP +6.86000000000000E+007
如果在 currencies 表中的关系型列 SYMBOL 被定义为一个固定长度变量字符串,(例如,char(4) 而非 varchar(4) ),如果要让连接工作,我们需要删除后面所有的空格。我们可以通过编写这样的谓词:[currency = fn:normalize-space($SYMBOL)] 来实现。
为了完成这个连接,我们把货币符号传输到 XMLEXISTS 谓词中这样具体连接条件是一个 XQuery 谓词。相反的,我们也可以从 XML 数据中抽取主要的货币到 SQL 上下文中这样连接条件就是一个 SQL 谓词:
清单 26. 对 XML 数据使用 XMLCAST 和一个关系型连接谓词进行连接select t.tradeid, c.symbol, c.USDvalue * tx.amount as principal_value_USD
from trades t, currencies c,
xmltable('$TRADEDOC/FpML/trade/termDeposit/principal'
COLUMNS
amount double path 'amount') as tx
where
c.symbol = XMLCAST(
XMLQUERY('$TRADEDOC/FpML/trade/termDeposit/principal/currency')
as char(3));
通常情况下,在清单 25 中的查询比在清单 26 中的更好。
提示:因为XMLCAST 函数期望单个输入值。如果在 XMLQUERY 中的路径表达返回不止一个数据值的情况下 XMLCAST 函数会失败。如果路径表达太简单就可能会发生这种情况,例如 $TRADEDOC/FpML/trade//currency,如果交易文档描述外汇交易事务的话这可能返回多个货币符号,因为它允许使用关系型索引(在这种情况下,在 CURRENCIES.SYMBOL 上)。在清单 25 中不能使用这个索引,因为连接条件不是一个关系型谓词而是一个 XQuery 谓词。
- ››db2 对float类型取char后显示科学计数法
- ››DB2中出现SQL1032N错误现象时的解决办法
- ››DB2 锁升级示例
- ››db2诊断系列之---定位锁等待问题
- ››db2 命令选项解释
- ››最佳ASP.NET编程习惯
- ››DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 基础: 表空间和缓冲池
- ››DB2 XML 编程,第 1 部分: 理解 XML 数据模型
更多精彩
赞助商链接