DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的最佳实践,第 3 部分:如何高效并有效率的查询 XML 数据
2009-11-12 00:00:00 来源:WEB开发网清单 27 中的查询连接了 PARTIES 和 TRADES 表的 XML 列,以返回这个交易中各方的实际名字。为了可以使用 SELECT DISTINCT 和消除重复的交易方名字,结果值被输出成一个 SQL VARCHAR 类型。
清单 27. 用 SQL/XML 连接 XML 数据select distinct xmlcast(xmlquery('$PARTYINFO/Party/Name')as varchar(30))
from parties p, trades t
where XMLEXISTS('$PARTYINFO/Party[PtyID = $TRADEDOC/FpML/party/partyId]');
在普通 XQuery 也可以用两个嵌套的 FOR 子句表达相同的连接。你可以直接把它们想成在两个表之间的一个嵌套循环连接。
清单 28. 在两个 XML 文档之间的连接XQUERY distinct-values(
for $tdoc in db2-fn:xmlcolumn("TRADES.TRADEDOC")/FpML
for $pty in db2-fn:xmlcolumn("PARTIES.PARTYINFO")/Party
where $tdoc/party/partyId=$pty/PtyID
return $pty/Name);
在 XQuery 和 SQL/XML 查询中正确使用 * 和 //
通配符 * 和 // 在使用的时候需要小心,因为它们可能有性能影响并可能返回相当多的结果。无论你使用 XQuery 还是 SQL/XML 都会有很多不同的路径表达,这可能获取到期时间或某个交易的的本金总数。例如,/FpML/trade/termDeposit/principal /amount 和 //principal/amount 返回定期存款交易的本金总数。
为了获得最佳性能,比起 * 或 //,最好使用全路径,因为 DB2 可以跳过这个文档不相关的部分直接访问想要的元素。如果你用 //amount 替换 /FpML/trade/termDeposit/principal/amount,你访问的将是在这个文档中的所有“ amount ”元素。这需要 DB2 访问文档中的每一个分支,每一层的 principal/amount 元素,而这本是可以避免的开销。
- ››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 数据模型
更多精彩
赞助商链接