您的位置:首页 > 数据库 > Oracle

Oracle XQuery查询、构建和转换XML概述(6)

2008-03-04 13:32 330 查看
该查询将生成以下输出:
[code]EMPNO ENAME SAL ----- -------------- ---------- 7839 KING 5000 100 King 24000 101 Kochhar 17000 102 De Haan 17000
[/code]
  查询外部数据源

   使用 XQuery,可以基于 XML 数据以及可以用 XML 表示的非 XML 数据生成 XML 文档,无论其位置如何:无论是存储在数据库中、置于网站上、即时创建还是存储在文件系统中。但要注意,Oracle XML DB 为针对数据库中存储的数据进行的 XML 操作提供了非常高的性能和可伸缩性。因此,如果您能够完全控制所处理的数据,则最好将它移动到数据库中。

   正如您从前面的示例中了解到的,在 Oracle XQuery 实施中,doc 和 collection XQuery 函数用于访问 Oracle XML DB 信息库中存储的 XML 文档。可以通过 XMLTable 和 XMLQuery SQL 函数中的 PASSING 子句动态绑定外部数据源。考虑以下示例。假设您的公司要为那些致力于 XQ 项目的员工支付奖金。因此,财务部发布了 empsbonus.xml 文件,其中包含有资格获得奖金的员工列表以及该列表中输入的每个员工的奖金数额。empsbonus.xml 文件可能如下所示:

[code] 100 1200 101 1000
[/code]
   在实际情况中,以上的 XML 文件可能置于网站上(因此可以通过互联网获得)、以文件形式存储在本地文件系统中,或以文件资源形式存储在 Oracle XML DB 信息库中。就本示例而言,该文件位于网站上。为简单起见,可以在目录(Web 服务器在其中存储可从 Web 看到的文档)中创建一个员工文件夹,然后在该文件夹中插入 empsbonus.xml 文件,以便可以通过以下 URL 访问 empsbonus.xml 文件:

  http://localhost/employees/empsbonus.xml

   接下来,假设您需要基于 empsbonus.xml 文档中存储的数据创建一个报表。在该报表中,您可能不但要包含列表中显示的奖金数额以及每个员工的员工 ID,还要包含他/她的全名。因此,可以首先使用以下查询生成一个新的 XML 文档(假设您以 HR/HR 的身份连接):

[code]SELECT XMLQuery( 'for $k in 1 return ( {for $i in ora:view("employees")/ROW, $j in $emps/EMPLOYEES/EMPLOYEE where $i/EMPLOYEE_ID = $j/EMPNO return ( {xs:string($i/EMPLOYEE_ID)} {xs:string(fn:concat($i/FIRST_NAME, " ", $i/LAST_NAME))} {xs:integer($j/BONUS)} )} )' PASSING xmlparse (document httpuritype ('http://localhost/employees/empsbonus.xml').getCLOB()) as "emps" RETURNING CONTENT).getStringVal() as RESULT FROM DUAL;
[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: