WEB开发网
开发学院数据库DB2 用SQL查询DB2 XML数据 阅读

用SQL查询DB2 XML数据

 2008-05-15 14:58:11 来源:WEB开发网   
核心提示:现在我们考虑一个稍微不同的情景,假设您要检索多个 XML 元素值,用SQL查询DB2 XML数据(6),XMLTable 可以从 XML 列中的数据生成标量输出,可以为程序员提供 XML 数据的 “关系” 视图,以下语句产生类似于上述结果的结果集,不同的是 "Message"

现在我们考虑一个稍微不同的情景,假设您要检索多个 XML 元素值。XMLTable 可以从 XML 列中的数据生成标量输出,可以为程序员提供 XML 数据的 “关系” 视图,因此非常有用。与 XMLExists 和 XMLQuery 一样,XMLTable 函数使 DB2 在 XML 文档层次结构中定位到感兴趣的数据。然而,XMLTable 还包括一些子句,用于将目标 XML 数据映射到 SQL 数据类型的结果集列。

考虑以下查询(清单 11),该查询投影存储在 "items" 表中的关系数据和 XML 数据。(关于 "items" 表请查看 图 1)。评论 ID、客户 ID 和评语存储在 "comments" 列中的 XML 文档中。商品名称存储在一个 SQL VARCHAR 列中。

清单 11. 检索多个 XML 元素并将每个元素转换成传统的 SQL 数据类型select t.Comment#, i.itemname, t.CustomerID, Message from items i,
xmltable('$c/Comments/Comment' passing i.comments as "c"
columns Comment# integer path 'CommentID',
   CustomerID integer path 'CustomerID',
   Message varchar(100) path 'Message') as t

第一行指定将包含在结果集中的列。查询中后面的几行表明,用引号括起来、并且以变量 "t" 为前缀的列是基于 XML 元素值的列。第二行调用 XMLTable 函数指定包含目标数据("i.comments")的 DB2 XML 列和在该列的 XML 文档中的路径,通过该路径可以定位感兴趣的元素(在根元素 "Comments" 的子元素 "Comment" 中)。第 3 到 5 行的 "columns" 子句标识出将被映射到第一行指定的 SQL 结果集中的输出列的特定 XML 元素。这个映射需要指定 XML 元素值将被转换成的数据类型。在这个例子中,所有 XML 数据被转换成传统的 SQL 数据类型。

图 4 展示了运行该查询得到的示例结果。可以看到,输出是一个简单的 SQL 结果集。注意,列名已经被变成大写形式 —— 这在 SQL 中是很常见的。

图 4. 使用 XMLTable 函数的查询的示例输出

如果需要的话,还可以使用 XMLTable 创建包含 XML 文档的结果集。例如,以下语句产生类似于上述结果的结果集,不同的是 "Message" 数据被包含在一个 XML 列中,而不是包含在一个 SQL VARCHAR 列中。

清单 12. 检索多个 XML 元素并将它们转换成传统的 SQL 或 XML 数据类型
select t.Comment#, i.itemname, t.CustomerID, Message from items i,
xmltable('$c/Comments/Comment' passing i.comments as "c"
columns Comment# integer path 'CommentID',
   CustomerID integer path 'CustomerID',
   Message XML by ref path 'Message') as t

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

Tags:SQL 查询 DB

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