狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美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一区二区三区| 日本韩国欧美一区二区三区| 91精品福利在线| 在线观看亚洲a| 日韩欧美一级二级三级| 欧美精品一区二区蜜臀亚洲| 国产精品免费久久| 视频在线观看一区| 国产一区二区三区免费看| 国产毛片一区二区| 国产一区二区在线观看免费播放| 欧美日韩精品免费观看| 免费在线观看一区二区| 日韩精品最新网址| 国产欧美视频在线观看| 国产女人水真多18毛片18精品视频| 亚洲激情在线激情| 成人精品在线视频观看| 国产精品亚洲不卡a| 久久香蕉国产线看观看99| 日日摸夜夜添夜夜添国产精品| 国内综合精品午夜久久资源| 欧美性生交片4| 自拍偷拍亚洲激情| 99久久er热在这里只有精品15| 国产日韩1区| 日本一区二区高清| 国产乱对白刺激视频不卡| 亚洲永久免费精品| 亚洲天堂精品视频| 欧美.日韩.国产.一区.二区| 欧美日韩一本到| 亚洲美腿欧美偷拍| 黄色成人在线网站| 久久精品欧美一区二区三区不卡 | 色美美综合视频| 99re热精品| 亚洲欧美日韩小说| 暴力调教一区二区三区| 欧美猛男gaygay网站| 欧美精品一区二区三区蜜桃 | 懂色av一区二区三区免费看| 欧美午夜免费电影| 国内久久婷婷综合| 日韩一区二区中文字幕| 国产成人在线视频免费播放| 欧美一卡二卡三卡四卡| 成人av午夜影院| 亚洲国产精品成人综合色在线婷婷 | 日本一区二区三区四区在线视频 | 日韩精品一区二区三区视频在线观看| 亚洲欧洲精品天堂一级| 国产91精品一区二区麻豆网站| 国一区二区在线观看| 日韩西西人体444www| 中文字幕中文字幕一区| 岛国精品在线播放| 久久精品卡一| 国产成人日日夜夜| 亚洲三级电影网站| 免费看黄裸体一级大秀欧美| 伊人开心综合网| 久久久久久久久久码影片| 老司机免费视频一区二区| 欧美性感一区二区三区| 国产v综合v亚洲欧| 国产精品国产三级国产aⅴ无密码| 久久电影一区| 91小视频免费看| 日本不卡1234视频| 1024成人网色www| 欧美日韩一区二区电影| 欧美精品九九| 国产美女在线观看一区| 中文字幕免费不卡| 欧美色窝79yyyycom| 欧美视频1区| 看片的网站亚洲| 国产精品久久久久久久久免费丝袜 | 欧美高清视频在线高清观看mv色露露十八 | 一区二区三区中文免费| 日韩精品中文字幕一区| 国产日韩精品久久| 韩日午夜在线资源一区二区| 美日韩黄色大片| 亚洲一区电影777| 国产精品成人免费| 精品国产污污免费网站入口| 在线观看一区二区视频| 在线观看亚洲| 国产精品videossex久久发布| 国产99久久久国产精品免费看 | 成人理论电影网| 91亚洲精华国产精华精华液| 国产v综合v亚洲欧| 国产精品白丝jk黑袜喷水| 午夜视频在线观看一区二区三区| 日本一区免费视频| 在线日韩视频| 狠狠狠色丁香婷婷综合激情| 丝袜美腿亚洲一区| 日韩精彩视频在线观看| 亚洲一二三四区| 亚洲成人免费在线观看| 亚洲免费色视频| 亚洲色欲色欲www| 图片区小说区国产精品视频| 亚洲精品高清在线| 日韩经典中文字幕一区| 国产精品一区二区黑丝| 国产一区二区三区四| 国产精品短视频| 日韩高清不卡在线| 韩国精品在线观看| 懂色一区二区三区免费观看| 午夜天堂精品久久久久| 色哟哟国产精品| 久久久久久久一区| 亚洲电影一区二区三区| 精品一区二区精品| 欧美一区91| 国产欧美一级| 欧美成人官网二区| 午夜影院久久久| 欧美激情一区二区三区在线视频| 久久激情婷婷| 日韩美一区二区三区| 亚洲国产婷婷综合在线精品| 国产美女在线观看一区| 国产精品久久久久久久久婷婷| 久久久xxx| 久久精品夜色噜噜亚洲a∨| 午夜精品免费在线观看| hitomi一区二区三区精品| 亚洲资源av| 26uuu精品一区二区| 美脚の诱脚舐め脚责91| 欧美大度的电影原声| 国产精品一区二区三区网站| 久热re这里精品视频在线6| 亚洲欧美日韩人成在线播放| 成人性生交大片免费看中文| 日本道在线观看一区二区| 亚洲天堂久久久久久久| 欧美精品一区二区视频 | 国产日韩一区欧美| 中文字幕不卡一区| 国产成人午夜精品影院观看视频 | 在线欧美小视频| 亚洲一二三四久久| 国产欧美日韩一级| 综合欧美一区二区三区| 日韩亚洲精品在线| 亚洲一区在线播放| 国产精品久久一区二区三区| 国产精品家庭影院| 国语对白精品一区二区| 亚洲日本在线天堂| 国产欧美精品| 日本在线不卡视频| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲女爱视频在线| 国产亚洲激情| 黄色成人免费在线| 日韩欧美成人午夜| 91免费看`日韩一区二区| 成人欧美一区二区三区黑人麻豆| 国产欧美不卡| 成人综合婷婷国产精品久久蜜臀 | 国产一区自拍视频| 婷婷中文字幕一区三区| 精品国产自在久精品国产| 国产精品www994| 黑人巨大精品欧美一区| 欧美日韩国产一区| 欧美日韩精品免费观看| 亚洲精品一二三| 欧美性三三影院| 成人高清免费观看| 婷婷久久综合九色综合伊人色| 日韩欧美电影一区| 美日韩在线观看| 午夜精品婷婷| 激情六月婷婷久久| 亚洲综合视频网| 久久综合九色综合欧美就去吻| 美女日韩在线中文字幕| 色综合中文字幕| 狠狠狠色丁香婷婷综合久久五月| 国产精品高潮久久久久无| 欧美日韩你懂得| 亚洲欧美日韩专区| 国产精品mm| www.欧美日韩国产在线| 麻豆精品精品国产自在97香蕉 | 色88888久久久久久影院按摩| 91啪在线观看| 大白屁股一区二区视频| 亚洲成人在线网站|