大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 数据库 -> Oracle XQuery查询、构建和转换XML(2)

Oracle XQuery查询、构建和转换XML(2)

时间: 2021-07-31 作者:daque

查问 oracle xml db 消息库中的 xml 数据

为考察 oracle xml db 消息库中保存的 xml 数据,oracle xquery 引入了 fn:doc 和 fn:collection xquery 因变量。运用 fn:doc,您不妨查问 xml 消息库中保存的单个 xml 文书档案,而 fn:collection 使您不妨考察同一消息库文献夹中保存的多个 xml 文书档案。

正如正文之前(参见运用联系数据建立 xml局部)引见的示例所演练,运用 fn:doc 特殊大略径直。它获得表白消息库文献资源 (uri) 的字符串并归来该 uri 指向的文书档案。要领会 fn:collection xquery 因变量的效率,同一文献夹中起码应有两个消息库文献。即使仍旧运转了列表 1 中的代码,则仍旧创造了 /public/employees 消息库文献夹并在个中保存了 employees.xml 文献。所以,您将须要在该文献夹中起码再创造一个 xml 文献,而后本领试用 fn:collection。列表 2 中的 pl/sql 代码鉴于 scott/tiger 演练数据库形式的 dept 和 emp 表保存的联系数据建立 xml,而后将天生的 xml 文书档案动作 acc_dept.xml 生存到 /public/employees 消息库文献夹。要运转列表 2 中的 pl/sql 进程,请保证以 scott/tiger 的身份登录。

列表 2:鉴于联系数据建立 xml 并将其生存到 xml 消息库

declarexmldoc xmltype;beginselect xmlquery('for $j in ora:view("scott", "dept")/rowwhere $j/deptno = 10return ({$j/deptno,$j/dname} {for $i in ora:view("scott", "emp")/rowwhere $i/deptno = $j/deptnoreturn ({$i/empno,$i/ename,$i/sal})} )'returning content) into xmldoc from dual;if(dbms_xdb.createresource('/public/employees/acc_dept.xml', xmldoc)) thendbms_output.put_line('resource is created');elsedbms_output.put_line('cannot create resource');end if;commit;end;/

此时,/public/employees 消息库文献夹应包括两个文献:acc_dept.xml(由列表 2 中的 pl/sql 代码天生)和 employees.xml 文献(由列表 1 中的代码天生)。因为那些 xml 文书档案保存在同一消息库文献夹中,所以不妨运用 fn:collection 因变量考察两个 xml 文书档案中保存的职工消息。但是,纵然那些 xml 文书档案均包括职工 xml 元素(那些元素本质上具备沟通构造),但 xml 文书档案自己的构造截然不同。在 employees.xml 中,文书档案根元素为 employees,而 acc_dept.xml 将 department 用作根元素。要处置此题目,不妨经过 xquery 运用 xpath // 结构,进而导航到 xml 文书档案中的某个节点,而不用指定该节点的真实路途。以次示例演练了怎样在 xquery 表白式中运用 xpath // 结构:

select xmlquery('for $i in fn:collection("/public/employees")//employeewhere $i/sal >= 5000order by $i/enamereturn;$i'returning content) from dual;

该结构应天生以次输入:

102de haan170007839king5000100king24000101kochhar17000

您不妨看到,之上输入包括从 employees.xml 和 acc_dept.xml 中获得的职工 xml 元素,那些元素表白薪酬大于或即是 5,000 美元的职工。

将 xml 领会为联系数据

即使运用步调处置联系数据而非 xml,而您须要考察的数据以 xml 方法保存,则将 xml 领会为联系数据大概会特殊有效。连接举行上一局部的示例,您不妨运用 sql 因变量 xmltable 将职工 xml 元素领会为假造表的单个列,如次所示:

select emps.empno,emps.ename, emps.sal from xmltable('for $i in fn:collection("/public/employees")//employeewhere $i/sal >= 5000return;$i'columns empno number path '/employee/empno',ename varchar2(30) path '/employee/ename',sal number path '/employee/sal') emps;

该查问将天生以次输入:

empno ename sal----- -------------- ----------7839 king 5000100 king 24000101 kochhar 17000102 de haan 17000

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.