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

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

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

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

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

查詢外部數據源

使用 XQuery,可以基于 XML 數據以及可以用 XML 表示的非 XML 數據生成 XML 文檔,無論其位置如何:無論是存儲在數據庫中、置于網站上、即時創建還是存儲在文件系統中。但要注意,Oracle XML DB 為針對數據庫中存儲的數據進行的 XML 操作提供了非常高的性能和可伸縮性。因此,如果您能夠完全控制所處理的數據,則最好將它移動到數據庫中。

正如您從前面的示例中了解到的,在 Oracle XQuery 實施中,doc 和 collection XQuery 函數用于訪問 Oracle XML DB 信息庫中存儲的 XML 文檔。可以通過 XMLTable 和 XMLQuery SQL 函數中的 PASSING 子句動態綁定外部數據源。考慮以下示例。假設您的公司要為那些致力于 XQ 項目的員工支付獎金。因此,財務部發布了 empsbonus.xml 文件,其中包含有資格獲得獎金的員工列表以及該列表中輸入的每個員工的獎金數額。empsbonus.xml 文件可能如下所示:

100

1200





101

1000

在實際情況中,以上的 XML 文件可能置于網站上(因此可以通過互聯網獲得)、以文件形式存儲在本地文件系統中,或以文件資源形式存儲在 Oracle XML DB 信息庫中。就本示例而言,該文件位于網站上。為簡單起見,可以在目錄(Web 服務器在其中存儲可從 Web 看到的文檔)中創建一個員工文件夾,然后在該文件夾中插入 empsbonus.xml 文件,以便可以通過以下 URL 訪問 empsbonus.xml 文件:

http://localhost/employees/empsbonus.xml

接下來,假設您需要基于 empsbonus.xml 文檔中存儲的數據創建一個報表。在該報表中,您可能不但要包含列表中顯示的獎金數額以及每個員工的員工 ID,還要包含他/她的全名。因此,可以首先使用以下查詢生成一個新的 XML 文檔(假設您以 HR/HR 的身份連接):

SELECT XMLQuery(

'for $k in 1

return (

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

$j in $emps/EMPLOYEES/EMPLOYEE

where $i/EMPLOYEE_ID = $j/EMPNO

return (

{xs:string($i/EMPLOYEE_ID)}

{xs:string(fn:concat($i/FIRST_NAME, " ", $i/LAST_NAME))}

{xs:integer($j/BONUS)}

)}
)'

PASSING xmlparse (document httpuritype

('http://localhost/employees/empsbonus.xml').getCLOB()) as "emps"

RETURNING CONTENT).getStringVal() as RESULT FROM DUAL;

以上查詢是一個有關如何使用 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('<>

...

您可能對為以上查詢生成的執行計劃并不滿意。尤其是,所處理的行數可能非常大。由于 SQL 調整的主要目標是避免訪問對結果沒有任何影響的行,因此可能要繼續調整查詢以優化性能。對查詢中包含的 XPath 表達式進行重新建模后,可以再次重試它,如下所示:

SELECT count(*)

FROM oe.purchaseorder, XMLTable(

'for $i in /PurchaseOrder

where $i/User = "CJOHNSON"

return $i/User'

PASSING OBJECT_VALUE) ptab;
這次,輸出應如下所示: 

COUNT(*)

----------

9


Execution Plan

---------------------------------------------------

Plan hash value: 3411896580
---------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

----------------------------------------------------------------

| 0 | SELECT STATEMENT | | 1 | 29 | 7 (0) | 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 29 | | |
| 2 | NESTED LOOPS | | 1 | 29 | 7 (0) | 00:00:01 |
| 3 | FAST DUAL | | 1 | | 2 (0) | 00:00:01 |
|* 4 | TABLE ACCESS FULL | PURCHASEORDER | 1 | 29 | 5 (0) | 00:00:01 |
Predicate Information (identified by operation id):

---------------------------------------------------
4 - filter("PURCHASEORDER"."SYS_NC00022$"='CJOHNSON' AND

SYS_CHECKACL("ACLOID","OWNERID",xmltype('<>

...

您可以看到,以上顯示的查詢生成相同的最終結果,但它們的執行計劃并不相同。查看最后一個示例中的 XQuery 表達式,您可能會注意到它迭代頂層 PurchaseOrder 元素,其中的每個 PurchaseOrder 元素都表示基于 PurchaseOrder XMLType 模式的表中的一行。這意味著實際上重寫 XQuery 表達式,以迭帶基礎對象表(用于存儲分解的 PurchaseOrder 文檔)中的行。與查詢要迭代不表示基礎表中的單個行的 XML 元素相比,該方法的性能更好一些。

但在某些情況下,很難發現 XQuery 表達式的哪個構造將使某些查詢的性能更好。這就是為什么最好在開發階段使用調整工具的原因。

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

本類教程下載

系統下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
欧洲亚洲国产日韩| 中文一区在线| 亚洲国产综合人成综合网站| 国产一区二区高清| 国产精品久久二区二区| 久久午夜激情| 国产黄色91视频| 国产精品天天摸av网| 亚洲深夜影院| 国产真实乱对白精彩久久| 国产精品国产三级国产有无不卡 | 久久影视一区二区| 国内精品福利| 水野朝阳av一区二区三区| 欧美日韩三级电影在线| 亚洲一区在线看| 欧美一区二区三区免费观看视频 | 综合在线观看色| 色哟哟在线观看一区二区三区| 成人动漫一区二区三区| 亚洲蜜桃精久久久久久久| 日韩欧美电影一二三| 欧美在线观看视频一区二区三区| 国产在线不卡视频| 天天av天天翘天天综合网色鬼国产| 久久aⅴ国产紧身牛仔裤| 美腿丝袜亚洲色图| 亚洲1区2区3区4区| 日韩一区有码在线| 国产三级久久久| 日韩欧美中文字幕一区| 午夜精品久久久久久久| 久久精品欧美一区二区三区麻豆| 在线观看国产精品网站| 欧美专区在线| 蜜桃精品久久久久久久免费影院| 999在线观看精品免费不卡网站| 国产91露脸合集magnet | 国产综合网站| 国产综合久久| 欧美日韩一区自拍| 亚洲成人在线| 亚洲福利专区| 亚洲一区中文| 美女诱惑一区| 久久精品亚洲国产奇米99| 91精品免费在线观看| 欧美日韩免费一区二区三区视频| 久久综合精品一区| 欧美这里有精品| 精品国精品自拍自在线| 亚洲国产成人私人影院tom| 国产欧美视频一区二区| 1024成人网| 偷拍亚洲欧洲综合| 人人精品人人爱| 懂色一区二区三区免费观看| 欧美深夜福利| 日本韩国欧美国产| 日韩一区二区视频| 亚洲精品你懂的| 日韩av一级片| 麻豆成人久久精品二区三区小说| 国产美女av一区二区三区| 国产91丝袜在线18| 国模一区二区三区| 羞羞答答国产精品www一本| 欧美视频一区在线观看| 亚洲国产成人在线| 亚洲成av人片www| av在线一区二区| 久久国产精品一区二区三区四区| 欧美美女激情18p| 亚洲精品v日韩精品| 成人午夜在线免费| 色综合久久天天| 中文欧美字幕免费| 国产九色精品成人porny| 国产精品区免费视频| 欧美一级日韩不卡播放免费| 亚洲精品大片www| 91美女视频网站| 69精品人人人人| 午夜精品福利在线| 狠狠色综合网站久久久久久久| 欧美精品乱码久久久久久按摩| 综合久久国产九一剧情麻豆| 成人小视频在线观看| 色综合久久精品| 亚洲国产高清aⅴ视频| 国产不卡视频在线观看| 欧美系列一区二区| 久久99精品国产麻豆婷婷| 香蕉免费一区二区三区在线观看 | av激情成人网| 欧美精品v国产精品v日韩精品| 国产精品久久久久久久久免费相片| 国产精品一区二区三区乱码| 欧美日韩免费在线视频| 美女脱光内衣内裤视频久久网站 | 国产99久久久国产精品潘金网站| 亚洲欧美日本国产专区一区| 国产精品久久久久久久午夜片 | 中文字幕一区视频| 不卡的av网站| 国产亚洲精久久久久久| 欧美极品一区| 国产嫩草影院久久久久| 欧美黄免费看| 日韩一区日韩二区| 亚洲三级观看| 一区二区三区四区乱视频| 中文日韩在线| 婷婷综合在线观看| 欧美高清视频一二三区 | 蜜臀久久99精品久久久久宅男| 久久免费高清| 欧美影院一区| 最新不卡av在线| 久久综合福利| 国产成人午夜高潮毛片| 国产精品蜜臀在线观看| 午夜一级在线看亚洲| 国产精品996| 一区二区三区色| 欧美性xxxxx极品少妇| 国产成人精品三级| 亚洲图片欧美视频| 精品国产伦一区二区三区观看方式 | 西西裸体人体做爰大胆久久久| 石原莉奈在线亚洲二区| 你懂的国产精品永久在线| 亚洲国产成人私人影院tom| 91蝌蚪porny| 亚洲一区二区av电影| 欧美日韩国产经典色站一区二区三区| 99久久久免费精品国产一区二区| 国产精品人妖ts系列视频| 色狠狠色狠狠综合| 欧美大香线蕉线伊人久久国产精品| 亚洲美女在线一区| 国产午夜精品美女毛片视频| 日本精品免费观看高清观看| 成人午夜激情在线| 五月婷婷综合激情| ...av二区三区久久精品| 欧美一区二区三区公司| 亚洲一区二区三区欧美 | 日韩av一区二区三区四区| 欧美国产日韩a欧美在线观看| 欧美在线你懂的| 毛片一区二区| 国内综合精品午夜久久资源| 国产伦精品一区二区三区免费| 亚洲精品国产无套在线观| 欧美大尺度电影在线| 欧美日韩五月天| 欧美综合欧美视频| 欧美日韩一区二区三区免费看| 国产精品丝袜xxxxxxx| 在线综合亚洲| 99精品国产高清一区二区| 精品福利av| 成人av免费在线播放| 国产成a人无v码亚洲福利| 丰满岳乱妇一区二区三区| 国内成+人亚洲| 伊人成人在线视频| 亚洲国产精品一区二区第一页 | 亚洲综合不卡| 久久国产日韩| 欧美日本精品一区二区三区| 91激情五月电影| 欧美巨大另类极品videosbest| 欧美日韩亚洲另类| 欧美一区二区网站| 亚洲精品在线免费观看视频| 欧美另类变人与禽xxxxx| 91久久久免费一区二区| 欧美日本精品一区二区三区| 欧美一级二级三级乱码| 91麻豆精品国产91久久久更新时间| 欧美精选一区二区| 久久综合狠狠综合久久激情| 亚洲一二三四在线观看| 久久精品国产一区二区三| 99国产精品99久久久久久| 99热精品一区二区| 黄色工厂这里只有精品| 色婷婷激情综合| 久久久综合视频| 性做久久久久久久免费看| 成人免费观看av| 最新日韩av| 日韩无一区二区| 亚洲午夜精品在线| 国产成人精品三级| aa成人免费视频| 精品欧美久久久| 奇米色一区二区三区四区|