用SQL查询DB2 XML数据
2008-05-15 14:58:11 来源:WEB开发网使用 SQL/XML 中的 "FLWOR" 表达式
虽然我们只讨论了几个函数,其实 SQL/XML 为查询 XML 数据和将 XML 数据与关系数据集成提供了很多强大的功能。实际上,您已经看到了这方面的一些例子,但是这里我们还要再讨论一些例子。
通过 XMLExists 和 XMLQuery 函数都可以将 XQuery 嵌入到 SQL 中。前面的例子展示了如何使用这些函数和简单的 XPath 表达式访问 XML 文档中感兴趣的某个部分。现在我们考虑一个简单的例子,这个例子将 XQuery 包括在 SQL 查询中。
XQueries 可以包含 "for"、"let"、"where" "、"order by" 和 "return" 子句中的一些或者全部。这些子句一起形成了 FLWOR (发音为 flower)表达式。SQL 程序员会发现,将 XQueries 嵌入到 SELECT 列表中以便将 XML 文档的片段提取(或投影)到结果集是很方便的。虽然 XMLQuery 函数的用法不止于此,不过本文只讨论这种情况。(将来的文章将更深入地讨论 XQuery。)
假设您要检索 "Gold" 客户的姓名和首要 email 地址。在某些方面,这个任务类似于我们前面在探索如何投影 XML 元素值的时候完成过的一个任务(参见 清单 9)。而在这里,我们将 XQuery (带有 "for" 和 "return" 子句)作为 XMLQuery 函数的输入:
清单 15. 使用 XQuery 的 "for" 和 "return" 检索 XML 数据
select name, xmlquery('for $e in $c/Client/email[1] return $e'
passing contactinfo as "c")
from clients
where status = 'Gold'
第一行指定结果集中将包括客户姓名和 XMLQuery 函数的输出。第二行表明将返回 "Client" 元素的第一个 "email" 子元素。第三行标识出 XML 数据的源 —— "contactinfo" 列。第四行说明这个列在 "clients" 表中,最后,第五行表明我们只对 "Gold" 客户感兴趣。
因为这个例子很简单,在这里您可以这样编写这个查询。不过,也可以用一种更紧凑的方式编写这个查询:
清单 16. 以更紧凑的方式重写查询
select name, xmlquery('$c/Client/email[1]'
passing contactinfo as "c")
from clients
where status = 'Gold'
不过,通过 XQuery 的 return 子句可以按照需要转换 XML 输出。例如,您可以提取 email 元素值并将它们发布为 HTML。下面的查询将产生一个结果集,其中每个 Gold 客户的第一个 email 地址以 HTML 段落的形式返回。
清单 17. 检索 XML 并将其转换成 HTML
select xmlquery('for $e in $c/Client/email[1]/text()
return <p>{$e}</p>'
passing contactinfo as "c")
from clients
where status = 'Gold'
第一行表明您只对符合条件的客户的第一个 email 地址的文本表示形式感兴趣。第二行指定该信息在返回之前需要用 HTML 段落标记括起来。具体来说,花括号({ })指示 DB2 计算被括起来的表达式(在这里是 "$e")的值,而不是将其视作一个文字字符串。如果省略了花括号,对于每个符合条件的客户记录,DB2 将返回一个包含 "<p>$e</p>" 的结果。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接