zoukankan      html  css  js  c++  java
  • DB2 9 底子根基(730 考验)认证指南,第 7 部门: XQuery 简介(4)

    developerWorks








    或者的 XML 数据检索操纵

    在本节中,将学习若何编写检索整个 XML 文档和 XML 文档的特定部门(即片断)的 XQuery。为此,将运用 XPath 表达式和 FLWOR 表达式。

    检索 DB2 中存储的齐备 XML 文档

    在作为顶级言语运转时,XQuery 需求一个输入数据的滥觞。在 DB2 中,指定输入数据滥觞的一种步伐是挪用函数 db2-fn:xmlcolumn。这个函数有一个输入参数,这个参数标识用户感兴味的 DB2 表和 XML 列。db2-fn:xmlcolumn 函数前往给定的列中存储的 XML 文档序列。譬喻,以下查问前往包孕客户联结信息的 XML 文档序列:

    清单 12. 前往客户联结数据的或者 XQuery

                        
    xquery 
    db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')
    


    您或者会稀罕,为什么这个查问中指定的表和列名是大大写的。如果回忆一下前面用来创设这个表的 SQL 语句,就会知道表和列名是小写的。除非其余指定,DB2 会在内部编目表中将表和列名转换为大大写。因为 XQuery 是大大小写敏感的,所以小写的表和列名与 DB2 编目中的大大写称号不婚配。

    现在,考虑这个 XQuery 的输入。关于拔出 clients 表的 示例数据,清单 12 中查问的输入是 6 个 XML 文档,如下所示。

    清单 13. 前一个查问的输入

                        
    <?xml version="1.0" encoding="windows-1252" ?>
    <Client>
    	<Address>
    		<street>
    			5401 Julio Ave.
    		</street>
    		<city>
    			San Jose
    		</city>
    		<state>
    			CA
    		</state>
    		<zip>
    			95116
    		</zip>
    	</Address>
    	<phone>
    		<work>
    			4084630000
    		</work>
    		<home>
    			4081111111
    		</home>
    		<cell>
    			4082222222
    		</cell>
    	</phone>
    	<fax>
    		4087776666
    	</fax>
    	<email>
    		love2shop@yahoo.com
    	</email>
    </Client>
    <?xml version="1.0" encoding="windows-1252" ?>
    <Client>
    	<Address>
    		<street>
    			1204 Meridian Ave.
    		</street>
    		<apt>
    			4A
    		</apt>
    		<city>
    			San Jose
    		</city>
    		<state>
    			CA
    		</state>
    		<zip>
    			95124
    		</zip>
    	</Address>
    	<phone>
    		<work>
    			4084440000
    		</work>
    	</phone>
    	<fax>
    		4085555555
    	</fax>
    </Client>
    <?xml version="1.0" encoding="windows-1252" ?>
    <Client>
    	<Address>
    		<street>
    			9407 Los Gatos Blvd.
    		</street>
    		<city>
    			Los Gatos
    		</city>
    		<state>
    			CA
    		</state>
    		<zip>
    			95032
    		</zip>
    	</Address>
    	<phone>
    		<home>
    			4083332222
    		</home>
    	</phone>
    </Client>
    <?xml version="1.0" encoding="windows-1252" ?>
    <Client>
    	<Address>
    		<street>
    			501 N. First St.
    		</street>
    		<city>
    			Campbell
    		</city>
    		<state>
    			CA
    		</state>
    		<zip>
    			95041
    		</zip>
    	</Address>
    	<phone>
    		<home>
    			4081221331
    		</home>
    		<cell>
    			4087799881
    		</cell>
    	</phone>
    	<email>
    		golfer12@yahoo.com
    	</email>
    </Client>
    <?xml version="1.0" encoding="windows-1252" ?>
    <Client>
    	<Address>
    		<street>
    			1912 Koch Lane
    		</street>
    		<city>
    			San Jose
    		</city>
    		<state>
    			CA
    		</state>
    		<zip>
    			95125
    		</zip>
    	</Address>
    	<phone>
    		<cell>
    			4085430091
    		</cell>
    	</phone>
    	<email>
    		beatlesfan36@hotmail.com
    	</email>
    	<email>
    		lennonfan36@hotmail.com
    	</email>
    </Client>
    <?xml version="1.0" encoding="windows-1252" ?>
    <Client>
    	<Address>
    		<street>
    			4209 El Camino Real
    		</street>
    		<city>
    			Mountain View
    		</city>
    		<state>
    			CA
    		</state>
    		<zip>
    			95033
    		</zip>
    	</Address>
    	<phone>
    		<home>
    			6503310091
    		</home>
    	</phone>
    </Client>
    


    如果您有兴味,还可以运用寻常的 SQL 检索 contactinfo 列中包孕的齐备 XML 文档集。或者的 "select contactinfo from client" 语句就可以或许完成这个任务。

    检索特定的 XML 元素

    用户常常但愿检索 XML 文档中的特定元素。用 XQuery 完成这个任务很苟且。假定但愿检索全数供给了传真号的客户的传真号。下面是编写这种查问的一种步伐:

    清单 14. 检索客户传真号的 FLWOR 表达式

                        
    xquery 
    for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/fax
    return $y
    


    第一行指示 DB2 挪用它的 XQuery 理会器。下一行指示 DB2 遍历 CLIENTS.CONTACTINFO 列中包孕的 Client 元素的 fax 子元素。每个 fax 元素顺次绑定到变量 $y。第三行指示关于每次迭代前往 $y 的值。成果是一系列 XML 元素,如下所示。

    清单 15. 前一个查问的示例输入

                        
    <fax>4087776666</fax>
    <fax>4085555555</fax>     
    


    (这里施展阐发的输入经过了简化。XML 版本信息曾经去丧失了,因为它关于本教程并不严正。可是,在 DB2 中运转的 XQuery 都会前往这些信息。示例见 清单 13。)

    清单 14 所示的查问也可以表现为一个三步的途径表达式:

    清单 16. 检索客户传真号的途径表达式

                        
    xquery 
    db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/fax
    


    在 XQuery 底子根基 一节中,理解了文本节点。我们在这里运用这一常识。假定不单愿从查问获得 XML 片断,而是获得 XML 元素值的文本表现。为此,可以在 return 子句中挪用 text() 函数:

    清单 17. 检索客户传真号的文本表现的两个查问

                        
    xquery 
    for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/fax
    return $y/text()
    (或)
    xquery
    db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/fax/text()
    


    这些查问的输入是:

    清单 18. 前两个查问的示例输入

                        
    4087776666
    4085555555
    


    本节中前面的查问的成果相当或者,因为它们都触及 fax 元素,这个元素基于一种原始数据类型。虽然,元素或者基于复杂大的类型,或者包孕子元素(或嵌套的层次结构)。客户联结信息的 Address 元素就是这种元素的例子。考虑以下 XQuery 会前往什么:

    清单 19. 检索复杂大 XML 类型的 XQuery

                        
    xquery 
    for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
    return $y
    (或) 
    xquery
    db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
    


    如果您猜想会前往一系列 XML 片断,此中包孕 Address 元素及其全数子元素,那么您猜对了。下面是输入的摘录:

    清单 20. 前面查问的部门输入

                        
    <Address>
      <street>5401 Julio Ave.</street>
      <city>San Jose</city>
      <state>CA</state>
      <zip>95116</zip>
    </Address>
    <Address>
      <street>1204 Meridian Ave.</street>
      <apt>4A</apt>
      <city>San Jose</city>
      <state>CA</state>
      <zip>95124</zip>
    </Address>
    <Address>
       <street>9407 Los Gatos Blvd.</street>
       <city>Los Gatos</city>
       <state>CA</state>
       <zip>95032</zip>
    </Address>
    . . .  
    





    版权声明: 原创作品,准许转载,转载时请务必以超链接形式标明文章 原始来由 、作者信息和本声明。不然将追查司法责任。

  • 相关阅读:
    Repeater使用二
    db2, oracle和sqlserver取前几行的语法
    AspNet 路径问题
    PL/Sql 中创建、调试、调用存储过程
    ORA错误编码
    PL/SQL 设置
    常用命令行
    SQL Server将单表数据导出成insert脚本形式
    获取Url链接内容
    Oracle安装注意事项
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1972937.html
Copyright © 2011-2022 走看看