用 SQL 查询 DB2 XML 数据
2007-05-20 16:17:17 来源:WEB开发网如果每个 Gold 客户有多个 email 地址,那么需要指示 DB2 只返回首要的地址(也就是在客户的 "contactinfo" 文档中找到的第一个 email 地址)。为此,可以修改查询的第一行中的表达式:
清单 9. 检索每个符合条件的客户的第一个 email 地址select xmlquery('$c/Client/email[1]'
passing contactinfo as "c")
from clients
where status = 'Gold'
最后,如果有些 Gold 客户没有 email 地址,那么可能要编写一个查询从结果集中排除 null 值。为此可以修改之前的查询,添加另一个谓词到 WHERE 中,以测试是否缺少 email 信息。您已经熟悉了一个可以帮您实现这一点的 SQL/XML 函数 —— 那就是 XMLExists。清单 10 展示了如何重新编写之前的查询,以便过滤掉那些联系方式(存储为 XML 文档)中缺少 email 地址的 Gold 客户的行:
清单 10. 对于至少有一个 email 地址的客户,检索每个符合条件的客户的第一个 email 地址select xmlquery('$c/Client/email[1]'
passing contactinfo as "c")
from clients
where status = 'Gold'
and xmlexists('$c/Client/email' passing contactinfo as "c")
现在我们考虑一个稍微不同的情景,假设您要检索多个 XML 元素值。XMLTable 可以从 XML 列中的数据生成标量输出,可以为程序员提供 XML 数据的 “关系” 视图,因此非常有用。与 XMLExists 和 XMLQuery 一样,XMLTable 函数使 DB2 在 XML 文档层次结构中定位到感兴趣的数据。然而,XMLTable 还包括一些子句,用于将目标 XML 数据映射到 SQL 数据类型的结果集列。
- ››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表' (数...
更多精彩
赞助商链接