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

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

 2009-11-12 00:00:00 来源:WEB开发网   
核心提示: 这个查询例子使用 XMLEXISTS 来查询 partyID 510026 发起的交易并应用 XMLQUERY 来从相应文档返回交易数据,结果就是:TRADEIDTRADEDATE1232001-04-29Z4562001-10-23Z你可通过在 XMLEXISTS 和 XMLQUERY 函数中

这个查询例子使用 XMLEXISTS 来查询 partyID 510026 发起的交易并应用 XMLQUERY 来从相应文档返回交易数据。结果就是:

TRADEID  TRADEDATE 
    123  2001-04-29Z 
    456  2001-10-23Z

你可通过在 XMLEXISTS 和 XMLQUERY 函数中忽略 PASSING 子句来以简化查询。如在如下面代码所示,你可以把列名作为 XQuery 表达式中的变量,而不需要 PASSING 子句。我们将从现在开始使用这个简化后的语法。


清单 17. 使用可选的公式来简化清单 16 中的查询

select tradeId, 
   xmlquery('$TRADEDOC/FpML/trade/tradeHeader/tradeDate/text()') 
    as tradeDate 
 from trades 
 where xmlexists('$TRADEDOC/FpML/party[partyId="510026"]') 
  and tradeId < 600;

我们可以使用 XMLTABLE 函数来表达相同的查询,见清单 18 。在这个格式中,我们指定条件来约束输入数据并抽取我们感兴趣的输出值。在 XMLTABLE 函数中的 XQuery 表达指定了涉及 partyID510026 的交易和在 COLUMNS 子句(“ trade/tradeHeader/tradeDate ”)中的路径表达,以一个 SQL DATE 类型返回他们的交易数据。它的数据和清单 16,17 中的查询一样。这个 XMLTABLE 语法在 XQuery 表达中避免了 PASSING 子句。


清单 18. 清单 16 中的查询的变种 XMLTABLE

select t.tradeId, tx.tradeDate 
 from trades t, 
  XMLTABLE('$TRADEDOC/FpML[party/partyId="510026"]' 
   COLUMNS 
    tradeDate  date  path 'trade/tradeHeader/tradeDate' ) as tx 
 where t.tradeId < 600;

上一页  1 2 3 4 5 6 7 8  下一页

Tags:DB 最佳 实践

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