DB2 9 底子基本(730 测验)认证指南,第 7 局部: XQuery 简介(8)
2011-03-07 00:08
363 查看
![](https://www6.software.ibm.com/developerworks/cn/i/dw.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201103/db6c26e26e5c82a0b8bb4065f252f3a3.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201103/db6c26e26e5c82a0b8bb4065f252f3a3.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201103/db6c26e26e5c82a0b8bb4065f252f3a3.gif)
“混合型” 盘考
您曾经看到了若何编写 XQuery 来检索 XML 文档片段、建树 XML 输出的新方式以及根据在盘考自己指定的前提前往分歧的输出。这些都是盘考 DB2 中存储的 XML 数据的简双设施。
您要晓得,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不克不及忽略的:若何编写同时网罗 SQL 和 XQuery 表达式的盘考。若是需求让盘考同时根据 XML 和非 XML 列值中缀过滤,那么就需求驾驭这种技术。
由于本教程紧张关注 XQuery 并将它用作顶级语言,以是我们先钻研若何将 SQL 嵌入 XQuery 中。但肯定要留意,也可以给与相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个冗长示例。但是,关于 SQL/XML 以及若何将 XQuery 嵌入 SQL 中的更多信息,请拜见 参考材料。
将 SQL 嵌入 XQuery 中
要将 SQL 嵌入 XQuery 中,需求哄骗
db2-fn:sqlquery函数替换
db2-fn:xmlcolumn函数。
db2-fn:sqlquery函数实行一个 SQL 盘考并只前往选择的数据。通报给
db2-fn:sqlquery的 SQL 盘考必需只前往 XML 数据;这使 XQuery 可以进一步处置赏罚 SQL 盘考的了局。
我们用一个示例将曾经讨论的很多不雅点连系起来。假定盼愿取得住在 San Jose 的 Gold 客户的全部电子邮件地点。若是一个客户有多个电子邮件地点,那么盼愿这些地点在输出中是同一个记录的构成局部。最初,若是吻合前提的 Gold 客户没有提供电子邮件地点,那么盼愿检索他的邮政地点。编写这样的盘考的一种设施如下:
清单 35. 将 SQL 嵌上钩罗前提逻辑的 XQuery 中
xquery for $y in db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client where $y/Address/city="San Jose" return ( if ($y/email) then <emailList>{$y/email}</emailList> else $y/Address )
我们过细看看第三行,这里嵌入了一个 SQL 语句。这个
SELECT语句网罗一个基于
status列的盘考谓词,将这个
VARCHAR列的值与字符串 Gold 中缀角力计算。在 SQL 中,这样的字符串要突围在单引号中。固然这个示例看起来仿佛哄骗了双引号,但实际上是在角力计算值前后哄骗了两个单引号(''Gold'')。“额定的” 单引号是本义字符。若是在基于字符串的盘考谓词外哄骗双引号替换单引号,就会出现语法错误。
这个盘考的输出是:
清单 36. 盘考输出
<emailList> <email> love2shop@yahoo.com </email> <Address> <street> 1204 Meridian Ave. </street> <apt> 4A </apt> <city> San Jose </city> <state> CA </state> <zip> 95124 </zip> </Address>
将 XQuery 嵌入 SQL 中
肯定要留意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对类型 SQL/XML 函数的撑持,这些函数屡次用来组织以 SQL 为最外层(即顶级)语言的混合型盘考。固然详细讨论 DB2 的 SQL/XML 撑持赶过了本教程的范围,但至少有两个函数值得留意:
XMLExists
批准导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的前提中缀测试。在 SQL
WHERE子句中指按时,
XMLExists将前往的了局限定为那些网罗餍足指定前提(即指定的前提为 “true”)的 XML 文档的行。您可以猜到了,应该将 XQuery 表达式作为输出通报给
XMLExists函数,从而导航到文档中感兴趣的节点。
XMLQuery
批准将 XML 放到 SQL/XML 盘考前往的 SQL 了局齐集。它平日用来从 XML 文档中检索一个或多个元素。异常,
XMLQuery函数也以 XQuery 表达式作为输出。
思索以下盘考。这个盘考将 SQL 用作顶级语言并网罗对
XMLQuery和
XMLExists函数的挪用:
清单 37. 将 XQuery 途径表达式嵌入 SQL 来获取和限定 XML 数据
select name, status, xmlquery('$c/Client/phone/home' passing contactinfo as "c") from clients where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")
这个盘考前往的了局集包罗客户姓名、形状和家庭德律风号码列。前两列网罗 SQL VARCHAR 数据,第三列网罗从吻合前提的 XML 文档中提取的一个 XML 元素。我们来过细看看这个盘考的第二行和第四行。
第二行在
SELECT子句中挪用
XMLQuery,这示意这个函数前往的了局应该作为 SQL 了局齐集的一列。我们指定一个 XQuery 途径表达式作为这个函数的输出,这个表达式让 DB2 导航到 Client 元素上面的 phone 元素的 home 子元素。这个途径表达式引用一个变量($c),这个变量引用 contactinfo 列。
第四行在 SQL
WHERE子句中挪用
XMLExists,这示意 DB2 应该根据一个 XML 谓词对了局中缀限定。这个谓词是在途径表达式中指定的,它示意我们只对具有特定邮政编码的客户感兴趣。异常,作为这个 SQL/XML 函数的输出提供的途径表达式界说一个变量(在这个示例中是 $y),这个变量标识 DB2 将在那里探求 XML 文档(在 contactinfo 列中)。
马虎 示例数据,这个盘考的输出是一个单行的了局集,其值如下:
清单 38. 盘考输出
Lisa Hansen Silver <home>4083332222</home>
关于 DB2 的 SQL/XML 撑持的更多信息,拜见 参考材料。
版权声明:
原创作品,批准转载,转载时请务必以超链接方式标明文章 原始情由 、作者信息和本声明。否则将究查执法责任。
相关文章推荐
- DB2 9 基础(730 测验)认证指南,第 7 局部: XQuery 简介(5)
- DB2 9 根蒂根基(730 测验)认证指南,第 7 部分: XQuery 简介(6)
- DB2 9 底子根基(730 考验)认证指南,第 7 部门: XQuery 简介(4)
- DB2 9 底子(730 磨练)认证指南,第 7 部分: XQuery 简介(3)
- DB2 9 基础(730 检验)认证指南,第 7 局部: XQuery 简介(2)
- DB2 9 根基(730 测验)认证指南,第 7 部分: XQuery 简介(1)
- DB2 9 根柢内幕底子(730 测验)认证指南,第 4 部分: 措置责罚 DB2 数据(2)
- DB2 9 基本根基(730 考试)认证指南,第 1 局部: DB2 打算(1)
- DB2 9 基础根本(730 测验)认证指南,第 6 局部: 数据并发性(1)
- DB2 9 底子(730 考试)认证指南,第 3 局部: 拜访 DB2 数据(3)
- DB2 9 根基内情(730 测验)认证指南,第 5 局部: 处理处罚 DB2 工具(6)
- DB2 9 底子(730 测验)认证指南,第 3 部门: 访问 DB2 数据(1)
- DB2 9 根蒂根基(730 考试)认证指南,第 7 部分: XQuery 简介(7)
- DB2 9 根蒂根底(730 测验)认证指南,第 1 部分: DB2 计划(2)
- DB2 9 根蒂根基底细(730 考试)认证指南,第 6 局部: 数据并发性(5)
- DB2 9 底子根本(730 检修)认证指南,第 4 部门: 处理 DB2 数据(1)
- DB2 9 根蒂(730 查验)认证指南,第 6 局部: 数据并发性(4)
- DB2 9 根本(730 检修)认证指南,第 6 局部: 数据并发性(2)
- DB2 9 使用斥地(733 测验)认证指南,第 1 局部: 数据库对象与编程措施(2)
- DB2 9 使用开辟(733 测验)认证指南,第 3 局部: XML 数据独霸(2)