科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道教你使用SQL查询DB2 9中的XML数据

教你使用SQL查询DB2 9中的XML数据

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

虽然 DB2 的混合体系结构与之前的版本有很大的不同,但是要利用它的新 XML 功能并不难。如果您已经熟悉 SQL,那么很快就可以将这方面的技能转化到对存储在 DB2 中的本地 XML 数据的处理上。

作者:赛迪网 来源:赛迪网 2007年9月5日

关键字: XML 数据库 DB2 DB2 9 SQL

  • 评论
  • 分享微博
  • 分享邮件
 

将关系数据发布为 XML

到到目前为止,我们一直都在着重讨论查询、提取或转换存储在 DB2 XML 列中的数据的方法。而且您已经看到,这些功能都可以通过 SQL/XML 提供。

SQL/XML 还提供了其他非常方便的特性。其中一个特性是将关系数据转换或发布为 XML。本文只讨论这方面的三个 SQL/XML 函数:XMLElement、XMLAgg 和 XMLForest。

通过 XMLElement 可以将存储在传统的 SQL 列中的数据转换成 XML 片段。也就是说,可以基于基本的 SQL 数据构造 XML 元素(带 XML 属性或者不带 XML 属性)。下面的例子嵌入了 XMLElement 函数来创建一系列的 item 元素,每个 item 元素包含一些子元素,分别存放从 "items" 表获得的 ID、品牌和库存单位("sku")值:

清单 18. 使用 XMLElement 将关系数据发布为 XML

select xmlelement (name "item", xmlelement (name "id", id), xmlelement (name "brand",
 brandname), xmlelement (name "sku", sku) ) from items where srp < 100

运行该查询将产生类似以下的结果:

清单 19. 上述查询的示例输出

<item><id>4272</id><brand>Classy</brand><sku>981140</sku></item>. . . 
<item><id>1193</id><brand>Natural</brand><sku>557813</sku></item>

可以将 XMLElement 与其他 SQL/XML 发布函数结合使用来构造 XML 值以及将这些值分组,使它们嵌套成一定的层次结构。清单 20 中的例子使用 XMLElement 创建 customerList 元素,该元素的内容按照 "status" 列中的值分组。对于每个 "customerList" 记录,XMLAgg 函数返回一系列的 customer 元素,每个 customer 元素包含基于 "name" 和 "status" 列的子元素。而且可以看到,customer 元素的值是按照客户姓名排序的。

清单 20. 聚集数据和对数据分组

select xmlelement(name "customerList",xmlagg (xmlelement (name "customer", 
xmlforest (name as "fullName", status as "status") )order by name ) )
from clients group by status

假设 "clients" 表包含三个不同的 "status" 值:"Gold"、"Silver" 和 "Standard"。运行上述查询将导致 DB2 返回三个 customerList 元素,每个 customerList 元素可能包含多个 customer 子元素,每个 customer 子元素又进一步包含姓名和状态信息。因此,输出将类似于以下内容:

清单 21. 上述查询的输出

<customerList><customer><fullName>Chris Bontempo</fullname><status>Gold</status>
</customer><customer><fullName>Ella Kimpton</fullName> <status>Gold</status></customer>. . . 
</customerList><customerList><customer><fullName>Lisa Hansen</fullName><status>Silver
</status></customer>. . .</customerList><customerList><customer><fullName>
Rita Gomez</fullName><status>Standard</status></customer>. . .</customerList>
更新和删除操作

虽然本文的重点是使用 SQL 搜索和检索存储在 XML 列中的数据,不过这里仍然值得花一点时间考虑一下另外两项常见的任务:更新和删除 XML 列中的数据。

DB2 允许用户使用 SQL 和SQL/XML 语句更新和删除 XML 数据。实际上,由于 XQuery 标准的初稿没有解决这些问题,DB2 用户必须依赖 SQL 来完成这些任务。

更新 XML 数据

DB2 允许用 SQL UPDATE 语句或通过使用系统提供的存储过程(DB2XMLFUNCTIONS.XMLUPDATE)来更新 XML 列。不管使用哪种方式,对 XML 列的更新都发生在元素级。然而,使用存储过程更新 XML 数据的程序员不需要提供整个 XML 文档给 DB2;他们只需指定要更新的 XML 元素。发出 UPDATE 语句的程序员则需要指定整个文档(而不仅仅是要更改的元素)。

例如,如果要发出一条 UPDATE 语句来更改某个特定客户的联系方式信息中的 email 地址,就必须在 XML 列中提供全部联系方式信息,而不仅仅是新的 email 元素值。根据 图 2,提供的信息将包括 "Address" 信息、"phone" 信息、"fax" 信息和 "email" 信息。

考虑以下语句:

清单 22. 示例 UPDATE 语句

update clients set contactinfo=( xmlparse(document
 '<email>newemail@someplace.com</email>' ) )where id = 3227
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章