DB2 9翻开翻守旧往 XML 之门3

 
  查询 XML 数据
 
  而今您已经将 XML 数据拔出到了 DB2 中,接上去可以查询 XML 数据了。DB2 容许编写种品种型的查询。您可以编写用于检索整个 XML 文档的庞大查询,也可以编写根据 XML 谓词和关系查询谓词检索 XML 文档中的某些部门的初级查询。DB2 还支持其他范例的一些查询,歧将 XML 数据转换到新的 XML 文档,毗邻 XML 和非 XML 数据,聚合种品种型的数据,等等。在本文中,我将演示这样一个查询:
基于关系谓词和 XML 谓词过滤数据
检索切合前提的 XML 文档的某些部门以及存储在传统 SQL 列中的数据。
  DB2 今朝支持两种查询言语:SQL 和 XQuery。一个操纵法度可以搜罗用此中一种或两种言语编写的差别查询。XQuery 不支持参数占位符。理论上,这意味不须要硬编码查询谓词的 Java 操纵法度中的 XQuery 查询,必需被包装在一个运用 SQL/XML 函数(歧 XMLQuery()、XMLExists() 或 XMLTable())的 SQL 语句中。本文中的示例操纵法度运用 XMLQuery() 和 XMLExists() 来阐释一个罕见的编程使命:检索 XML 文档的某些部门。
  清单 4 中展现的例子前去寓居在邮政编码为 95125 的地区的 “黄金(Gold)” 客户的姓名和首选电子邮件所在。客户姓名和形态信息(歧 “Gold” 或 “Silver”)存储在 SQL VARCHAR 列,而电子邮件所在和邮政编码则搜罗在存储在 contactinfo 列中的 XML 文档中。是以,这个例子同时触及到传统 SQL 数据和 XML 数据。
  
  对付查询变量中定义的查询语句有须要更细心地作一番观调查,非但凡那些不认识 SQL/XML 和 XQuery 的读者更要加以注重。当然对这些言语作彻底的评述争持已超出了本文的范围,不过我们将详细说明这个查询中的每一行,使您体会它的逻辑。
  第一行指定 SQL name 列和 XMLQuery() 函数的输入将被搜罗在效果集中。为了指示 DB2 检索第一个切合前提客户的 email 元素,代码中搜罗了一个 XPath 表达式。XPath 是 XQuery 的一部门,它提供了一种在 XML 文档层次之间休止导航的举措。这个 XPath 表达式指示 DB2 导航到每个切合前提的 XML 文档的 Client 根元素下的第一个 email 元素。(注重,途径表达式是年夜小写敏感的)。$c 变量和 SQL FROM 子句批注这些文档可以在那儿那儿找到(在 CLIENTS 表的 contactinfo 列中)。
  SQL WHERE 子句用于限制前去的数据。不凡地,它规矩前去的 XML 文档只搜罗客户形态为某个特定值(Gold)的行中的 XML 文档。而且,只需寓居在某个特定地区(邮政编码为 95125)的客户的纪录才切合前提。XMLExists() 函数指定后一个限制。
  在这个示例查询中,XMLExists() 指示 DB2 确定一个给定的 XML 文档中可否搜罗指定邮政编码的客户所在。PASSING 子句指定可以在那儿那儿找到 XML 文档(在 contactinfo 列中)。注重,这个 PASSING 子句中的 $x 周围泛起了本义符(反斜杠)。这个查询的最月朔行挪用 CAST() 函数来将输入参数(用于邮政编码)的值强迫转换为妥当的 SQL 数据范例。在这个例子中,由 5 个字符组成的字符串是可以担负担任的。清单 5 展现了这个法度的输入。
  
  在这个示例输入中,有一个切合前提的客户(Edward Chen)没有前去电子邮件信息。这批注他的 XML contactinfo 文档中没有搜罗 email 元素,概略是由于他在客户简历表中没有提供电子邮件所在。还应注重,当然 Paula Lipenski 的接头举措信息中有两个电子邮件所在(见图 1),可是输入中只前去了她的一个电子邮件所在。这是由于示例操纵法度显式地指示 DB2 只检索切合前提的客户的第一个电子邮件所在。(见 XMLQuery() 函数中的 XPath 表达式。)倘若要去掉输入中的 <:email> 标识表记标帜,那么可以运用 XMLQuery() 函数中的一个途径表达式来指示 DB2 只前去 email 元素的文本值 $c/Client/email[1]/text()。
  编程提醒
  当然 DB2 的外地 XML 支持是新的,可是出色的数据库操纵法度编程理论依然适用。歧,指示 DB2 只检索须要的数据这一点依然很严肃。倘若只须要检索 XML 文档中搜罗的部门信息,那么检索整个 XML 文档就会低落功能,其它还会不须要地斲丧一些零碎资源。近似地,您应该细心考虑事件的范围和阻遏级别,在全体并发性与齐备性之间获得平衡。
  本文是一篇引见性的文章,是以试探 DB2 9 的 XML 特征超出了本文的范围,可是这样做是值得的。正如您概略希冀的那样,DB2 容许法度员运用认识的 SQL 语句更新和删除 XML 数据。其他,IBM 还在 IBM developerWorks 上宣布了一个用于 XML 数据的 “update” 存储历程。这个存储历程容许用户只提供更改的 XML 数据来休止更新,而不必提供修改的 XML 文档的所有内容。
  DB2 Developer Workbench 中有一些用于协助法度员图形化地构造 SQL/XQuery 查询和 XQuery 查询的向导。它还提供了用于构建操纵传统 SQL 数据或外地 XML 数据的存储历程的向导。十足向导都可以在 workbench 的 Data 透视图中启动。
  要获得关于十足这些专题的详细信息,请参阅照应的在线文档或本文反面列出的参考资料。
  新颖,可是认识
  须要处置惩罚存储在 DB2 中的外地 XML 数据的 Java 法度员可以运用认识的 JDBC 语句来执行查询和处置惩罚效果。为协助法度员编写、测试和调试他们的 Java 操纵法度,IBM 提供了一个基于 Eclipse 的 Developer Workbench for DB2。这个 workbench 提供了用于检查数据库内容、用 SQL/XML 或 XQuery 编写查询以及生成存储历程的向导。

 
来自: 新客网(www.xker.com) 详文参考:http://www.xker.com/page/e2008/0212/48567_3.html


版权声明: 原创作品,容许转载,转载时请务必以超链接方式标明文章 原始出处 、作者信息和本声明。否则将追查法律责任。

原文地址:https://www.cnblogs.com/zgqjymx/p/1975435.html