Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103636015
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-12 09:46:16

  来源:Oracle    作者:sixth

以上查询是一个有关如何使用 XQuery 基于 XML 和非 XML 数据(以不同的方式从不同的数据源中检索)生成 XML 文档的示例。具体而言,使用 ora:view() 函数访问 HR 演示模式中的默认 employees 关系表,并使用 PASSING 子句中的 httpuritype() 函数借助于 HTTP 访问 empsbonus.xml 文档。然后,在 FLWOR 表达式的 return 子句中构建新的 XML 文档。最后,将获得以下 XML 文档:



100
Steven King
1200


101
Neena Kochhar
1000

  解决性能问题

  正如您从前面的部分中了解到的,XQuery 是一种用于查询 Oracle 数据库存储的 XML 内容的高效方法 - 无论您是处理本地存储的 XMLType 数据还是查询基于关系数据构建的 XML 视图。但根据对数据使用的存储类型的不同,XQuery 表达式的执行性能可能迥然不同。尤其是,Oracle XML DB 可以优化基于由 ora:view 函数创建的 SQL/XML 视图而构建的 XQuery 表达式。对于 XMLType 表或列中存储的 XML 数据,只能对使用结构化(对象-关系)存储技术存储的基于 XML 模式的 XMLType 数据进行 XQuery 优化。

  所选择的存储模型并非是影响 XQuery 表达式执行性能的唯一因素。在某些情况下,XQuery 表达式本身的结构也可能导致性能问题。要监控 XQuery 表达式的性能,可以打印并检查关联的 EXPLAIN PLAN。在 SQL*Plus 中,只需设置 AUTOTRACE 系统变量,即可打印 SQL 优化程序使用的执行路径。但要执行该操作,请确保创建 PLUSTRACE 角色,然后将其授予连接到数据库所使用的用户。有关如何执行此操作的信息,请参阅 Oracle 数据库 10g 第 2 版 (10.2) 文档中《SQL*Plus 用户指南和参考》一书中的“调整 SQL*Plus”一章。以下示例演示了如何通过检查 EXPLAIN PLAN 生成的执行计划来获得好处。假设您已经将 PLUSTRACE 角色授予默认用户 OE,以 OE/OE 的身份登录并运行以下查询:

SET AUTOTRACE ON EXPLAIN

SELECT count(*)
FROM oe.purchaseorder, XMLTable(
'for $i in /PurchaseOrder/User
where $i = "CJOHNSON"
return $i'
PASSING OBJECT_VALUE) ptab;
  这将生成以下输出:
COUNT(*)
----------
         9
Execution Plan
----------------------------------------------------
Plan hash value: 4046110317
----------------------------------------------------------------------------------------
| Id | Operation              | Name            | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT       |                 |     1 |  226  |   29  (0)  | 00:00:01 |
|  1 |  SORT AGGREGATE        |                 |     1 |  226  |            |          |
|  2 |   NESTED LOOPS         |                 | 10782 | 2379K |   29  (0)  | 00:00:01 |
|* 3 |   TABLE ACCESS FULL    | PURCHASEORDER   |     1 |  226  |    5  (0)  | 00:00:01 |
|  4 |   COLLECTION ITERATOR P| XMLSEQUENCEFROMX|       |       |            |          |

Predicate Information (identified by operation id):
---------------------------------------------------
3 - filter(SYS_CHECKACL("ACLOID","OWNERID",xmltype('...
阅读(180) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~