WEB开发网
开发学院数据库Oracle Oracle XQuery查询、构建和转换XML 阅读

Oracle XQuery查询、构建和转换XML

 2007-05-05 12:04:35 来源:WEB开发网   
核心提示: ORDERTOTAL-EABEL-20021009123338324PDT1328.05EABEL-20021009123335791PDT2067.15EABEL-20021009123336251PDT289.6EABEL-20021009123336382PDT928.92要获得相同
ORDERTOTAL
-------------------------------------------------------------
EABEL-20021009123338324PDT
1328.05
EABEL-20021009123335791PDT
2067.15
EABEL-20021009123336251PDT
289.6
EABEL-20021009123336382PDT
928.92

要获得相同的最终结果,可以改用 XMLQuery 函数。但如果将上一个示例中使用的 XQuery 表达式参数传递给 XMLQuery(如下所示):

SELECT XMLQuery('for $i in /PurchaseOrder
where $i/User eq "EABEL"
return
{$i/Reference}
{fn:sum(for $j in $i/LineItems/LineItem/Part
return ($j/@Quantity*$j/@UnitPrice))}
'
PASSING OBJECT_VALUE
RETURNING CONTENT)
FROM purchaseorder;

则 XQuery 表达式返回的空序列将与 purchaseorder 表联接,从而包含在查询总结果集中。实际上,这意味着输出将不仅包含为用户 EABEL 请求的订单生成的 OrderTotal 元素,而且还包含为 purchaseorder 表中存储的所有其他订单生成的空行(默认情况下,purchaseorder 表包含 132 行)。从结果集中排除空行的方法之一是在 SELECT 语句的 WHERE 子句中使用 existsNode SQL 函数,而不是在 XQuery 表达式中使用 WHERE 子句,如下所示:

SELECT XMLQuery('for $i in /PurchaseOrder
return
{$i/Reference}
{fn:sum(for $j in $i/LineItems/LineItem/Part
return ($j/@Quantity*$j/@UnitPrice))}
'
PASSING OBJECT_VALUE
RETURNING CONTENT) AS ordertotal
FROM purchaseorder
WHERE existsNode(OBJECT_VALUE, '/PurchaseOrder[User = "EABEL"]') = 1;

以上查询与本部分开头的 XMLTable 示例生成相同的输出。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Oracle XQuery 查询

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接