WEB开发网
开发学院数据库DB2 DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的... 阅读

DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的最佳实践,第 3 部分:如何高效并有效率的查询 XML 数据

 2009-11-12 00:00:00 来源:WEB开发网   
核心提示: 查询结果是:TRADEIDSYMBOLPRINCIPAL_VALUE_USD-----790EUR+3.65000000000000E+007791EUR+7.30000000000000E+007789GBP+6.86000000000000E+007如果在 currencies 表中的关系型

查询结果是:

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 谓词。

上一页  4 5 6 7 8 9 10  下一页

Tags:DB 最佳 实践

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接