狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當前位置:系統之家 > 技術開發教程 > 詳細頁面

Oracle XQuery查詢、構建與轉換XML(1)

Oracle XQuery查詢、構建與轉換XML(1)

更新時間:2024-04-12 文章作者:未知 信息來源:網絡 閱讀次數:

 

在 Oracle 數據庫 10g 第 2 版中,Oracle 引入了一個與該數據庫集成的全功能自帶 XQuery 引擎,該引擎可用于完成與開發支持 XML 的應用程序相關的各種任務。XQuery 是一種用于處理 XML 數據模型的查詢語言,它實際上可操作任何類型的可用 XML 表達的數據。盡管 Oracle XQuery 實施使您可以使用數據庫數據和外部數據源,但在處理數據庫中存儲的結構化數據方面,Oracle XML DB 通常可以顯著提高性能。

本文提供的示例不僅演示了在什么場合下以及如何使用 XQuery 查詢、構建和轉換 XML,而且還演示了如何監控和分析 XQuery 表達式的性能執行,從而找到更高效的方法來處理同一工作負載。

基于關系數據構建 XML

在需要的情況下(例如,向 Web 服務發送結果),您可能要基于關系數據構建 XML。要在 Oracle 數據庫 10g 第 2 版之前的版本中完成此任務,通常需要使用 SQL/XML 生成函數,如 XMLElement、XMLForest 和 XMLAgg()。在 Oracle 數據庫 10 g 第 2 版中,XQuery 將比這些函數更為高效。具體而言,在 XQuery 表達式內部使用 ora:view XQuery 函數,您可以查詢現有的關系表或視圖以及即時構建 XML,從而不必通過關系數據顯式創建 XML 視圖。列表 1 中的 PL/SQL 代碼演示了如何使用 ora:view 基于示例數據庫模式 HR 的默認員工關系表中存儲的數據構建 XML 文檔。

列表 1:使用 ora:view 基于關系數據創建 XML

BEGIN

IF(DBMS_XDB.CREATEFOLDER('/public/employees')) THEN

DBMS_OUTPUT.PUT_LINE('Folder is created');

ELSE

DBMS_OUTPUT.PUT_LINE('Cannot create folder');

END IF;

COMMIT;

END;

/
DECLARE

XMLdoc XMLType;

BEGIN

SELECT XMLQuery(

'for $j in 1

return (

{

for $i in ora:view("HR", "employees")/ROW

where $i/EMPLOYEE_ID <= 102

return (

{xs:string($i/EMPLOYEE_ID)}

{xs:string($i/LAST_NAME)}

{xs:integer($i/SALARY)}

)} )'

RETURNING CONTENT) INTO XMLdoc FROM DUAL;

IF(DBMS_XDB.CREATERESOURCE('/public/employees/employees.xml', XMLdoc)) THEN

DBMS_OUTPUT.PUT_LINE('Resource is created');

ELSE

DBMS_OUTPUT.PUT_LINE('Cannot create resource');

END IF;

COMMIT;

END;

/

在列表 1 中的第一個 PL/SQL 過程中,您只是在 XML 信息庫中創建了一個新文件夾。在該信息庫文件夾中,您隨后將存儲此處顯示的第二個 PL/SQL 過程中創建的 XML 文檔。第二個 PL/SQL 過程首先發出 SELECT 語句,該語句使用 XMLQuery SQL 函數基于關系數據構建 XML。對于 XQuery 表達式(XMLQuery 在此處將其用作參數)而言,請注意嵌套的 FLWOR 表達式中使用的 ora:view XQuery 函數。在該示例中,ora:view 獲取兩個輸入參數,即“HR”和“employees”,它們指示該函數查詢屬于 HR 數據庫模式的員工表。因此,ora:view 將返回一個表示 HR.employees 表行的員工 XML 文檔序列。但為了節省結果文檔中的空間,只將前三個員工記錄傳遞給結果序列。這是通過在 FLWOR 表達式的 where 子句中指定 $i/EMPLOYEE_ID <= 102 而實現的。請注意 FLWOR 表達式的 return 子句中使用的 xs:string()xs:integer() XQuery 類型表達式。實際上,此處使用的這兩個 XQuery 表達式不僅將 XML 節點值轉換為相應的類型,而且還將提取這些節點值。隨后,生成的員工 XML 文檔作為 employees.xml 保存到之前在列表 1 中另一個 PL/SQL 過程中創建的 /public/employees XML 信息庫文件夾。要確保此操作已完成,可執行以下查詢:

SELECT XMLQuery('for $i in fn:doc("/public/employees/employees.xml")

return;

$i'

RETURNING CONTENT) AS RESULT FROM DUAL;

該查詢應生成以下輸出:





100

King

24000





101

Kochhar

17000





102

De Haan

17000



在以上 XQuery 中,fn:doc XQuery 函數用于訪問 Oracle XML DB 信息庫中存儲的單個 XML 文檔。但如果要處理一些具有相同或相似結構的 XML 文檔(存儲在同一 XML 信息庫文件夾中),應該怎么做?這種情況下,另一個用于處理 XML 信息庫資源的 XQuery 函數(即 fn:collection)可能會派上用場。本文稍后將介紹幾個有關如何使用 fn:collection XQuery 函數的示例。

查詢 XMLType 數據

XQuery 使您可以操作基于 XML 模式以及非基于模式的數據。以下示例演示了如何使用 XMLTable 函數從 OE 演示數據庫模式中查詢基于 PurchaseOrder XML 模式的 XMLType 表。

SELECT ttab.COLUMN_VALUE AS OrderTotal FROM purchaseorder,

XMLTable(

'for $i in /PurchaseOrder

where $i/User = "EABEL"

return;



{$i/Reference}



{fn:sum(for $j in $i/LineItems/LineItem/Part

return ($j/@Quantity*$j/@UnitPrice))}



'

PASSING OBJECT_VALUE

) ttab;

在以上示例中,您在 XMLTable 函數的 PASSING 子句中使用 OBJECT_VALUE 虛擬列將 purchaseorder 表作為上下文項傳遞給此處使用的 XQuery 表達式。XQuery 表達式計算用戶 EABEL 請求的每個購買訂單的總計,并為處理的每個訂單生成一個 OrderTotal XML 元素。要訪問生成的 XML,請使用 SELECT 列表中的 COLUMN_VALUE 虛擬列。最終的輸出應如下所示:

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 示例生成相同的輸出。


溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
欧美日韩国产小视频| 亚洲人精品一区| 欧美色男人天堂| 另类av一区二区| 亚洲精品欧美| 亚洲人人精品| 亚洲国产网站| 最新日韩av| 国产亚洲一区二区三区在线播放| 在线成人国产| 亚洲专区一区二区三区| 在线观看成人av电影| 伊人久久亚洲热| 一本久道久久综合婷婷鲸鱼| 一区二区视频欧美| 国产亚洲综合精品| 亚洲欧美日本日韩| 在线亚洲人成电影网站色www| 久久精品99| 欧美日韩视频在线一区二区| 欧美日韩一卡二卡三卡 | 成年人国产精品| hitomi一区二区三区精品| 91老师片黄在线观看| 亚洲国产一区二区在线| 久久av一区二区| 欧美日韩黄色一区二区| 26uuu精品一区二区| 国产亚洲婷婷免费| 一色桃子久久精品亚洲| 亚洲国产精品自拍| 久久机这里只有精品| 成人免费毛片app| 亚洲午夜激情在线| 久久精品官网| 日韩视频一区二区三区在线播放| 久久蜜桃一区二区| 亚洲一区二区三区四区中文字幕| 久久成人精品无人区| 国产传媒一区在线| 亚洲网址在线| 在线看不卡av| 日本一区二区高清| 日本欧美在线看| 99re热这里只有精品视频| 亚洲美洲欧洲综合国产一区| 欧美中文字幕一二三区视频| 精品va天堂亚洲国产| 亚洲一区二区三区四区的 | 夜夜爽99久久国产综合精品女不卡| 色悠悠久久综合| 久久嫩草精品久久久精品| 樱花草国产18久久久久| 国产一区二区久久| 日韩午夜免费视频| 欧美一区二区女人| 亚洲电影一级黄| 成人免费看黄yyy456| 亚洲欧美成人| 亚洲精品一线二线三线无人区| 亚洲国产欧美另类丝袜| 91在线视频官网| 欧洲生活片亚洲生活在线观看| 国产精品视频yy9299一区| 久久精品av麻豆的观看方式| 欧美日韩精品免费观看视一区二区| 欧美性生活大片视频| 亚洲色图在线看| 91蜜桃视频在线| 欧美三级视频在线| 亚洲国产成人91porn| 91麻豆精品一区二区三区| 欧美日韩国产a| 午夜亚洲福利老司机| 午夜精品偷拍| 欧美大度的电影原声| 免费人成黄页网站在线一区二区| 国产综合色产| 26uuu成人网一区二区三区| 免播放器亚洲一区| 亚洲一区二区三区欧美 | 看片的网站亚洲| 欧美一级视频| 亚洲精品国产第一综合99久久 | av午夜精品一区二区三区| 欧美在线小视频| 舔着乳尖日韩一区| 亚洲国产婷婷| 亚洲视频每日更新| 欧美日韩精品免费观看视一区二区 | 精品精品国产高清a毛片牛牛| 婷婷成人激情在线网| 国产欧美一级| 亚洲乱码中文字幕| 亚洲激情一区| 亚洲视频你懂的| 亚洲国产精品久久久久久女王| 欧美激情中文字幕一区二区| 成人午夜私人影院| 日韩欧美一级二级三级久久久| 黄页网站大全一区二区| 欧美午夜宅男影院| 蜜桃在线一区二区三区| 久久国产手机看片| 亚洲动漫第一页| 欧美综合77777色婷婷| 亚洲午夜三级在线| 久久久xxx| 午夜精品久久久久久久蜜桃app| 野花国产精品入口| 亚洲欧美成aⅴ人在线观看| 欧美日韩在线高清| 中文字幕日韩精品一区| 亚洲毛片一区| 日韩在线播放一区二区| 在线观看亚洲精品视频| 免费av网站大全久久| 欧美午夜精品一区| 国产精品自拍网站| 欧美成人欧美edvon| 99久久精品国产麻豆演员表| 国产亚洲精品资源在线26u| 欧美成ee人免费视频| 国产精品国产自产拍高清av | 欧美一区二区在线看| av成人老司机| 综合婷婷亚洲小说| 男人的天堂亚洲在线| 国内精品国产成人| 亚洲精品一区在线观看| 亚洲国产mv| 日韩av电影一区| 91精品国产色综合久久久蜜香臀| gogogo免费视频观看亚洲一| 中文字幕一区二区在线播放| 国产情侣一区| 国产综合成人久久大片91| 精品国产欧美一区二区| 最新国产乱人伦偷精品免费网站| 天天射综合影视| 欧美一区二区免费视频| 狠久久av成人天堂| 免费欧美高清视频| 日本一区二区视频在线观看| 亚洲经典在线| 久久黄色级2电影| 欧美激情资源网| 欧美日韩在线播放| 欧美成熟视频| 久久精品国产久精国产| 久久久国际精品| 色婷婷久久综合| www.成人在线| 日韩成人免费看| 久久精品夜色噜噜亚洲aⅴ| 久久婷婷人人澡人人喊人人爽| 成人av手机在线观看| 亚洲伊人色欲综合网| 欧美一二三四区在线| 亚洲欧美日韩在线综合| aaa欧美日韩| 久久国产精品第一页| 亚洲色图.com| 久久综合色天天久久综合图片| 久久综合福利| 狠狠爱www人成狠狠爱综合网| 男人的j进女人的j一区| 国产精品国产三级国产三级人妇 | 337p亚洲精品色噜噜| 国产一区二区三区的电影| 波多野洁衣一区| 青椒成人免费视频| 亚洲免费毛片网站| 久久久不卡网国产精品一区| 欧美亚洲图片小说| 亚洲免费网址| 亚洲高清不卡| av成人动漫在线观看| 国产老肥熟一区二区三区| 五月婷婷色综合| 亚洲精品一二三| 国产日韩欧美一区二区三区乱码 | 国产欧美大片| 欧美日韩调教| 成人理论电影网| 九九**精品视频免费播放| 亚洲国产日产av| 亚洲欧美另类综合偷拍| 久久―日本道色综合久久| 欧美人牲a欧美精品| 亚洲一区二区在线看| 亚洲国产午夜| 欧美亚洲不卡| 欧美日韩精品一本二本三本| www.欧美色图| 成人福利视频网站| 国产夫妻精品视频| 国产在线精品一区二区不卡了 | 国产成都精品91一区二区三| 麻豆精品国产91久久久久久|