在 Oracle XML DB 中使用 XQuery
本教程描述了如何在 Oracle XML DB 中使用 XQuery,。
大約 1 小時。
本教程包括下列主題:
單擊此圖標可以加載和查看本教程的所有屏幕截圖,。(警告:此操作會同時加載所有屏幕截圖,,網(wǎng)速較慢時,,響應(yīng)時間可能會比較長。)
注意:您還可以在下面的步驟中將光標放在每個單獨的圖標上,,僅加載和查看與該步驟相關(guān)的屏幕截圖,。
什么是 XQuery?
XML Query (XQuery) 是由 World Wide Web 聯(lián)合會致力推出的標準,,它使您能夠從 XML 文檔提取數(shù)據(jù),。XML Query 是專門為使用 XML 數(shù)據(jù)模型而設(shè)計的,并且成為以 XML 語言表達的數(shù)據(jù)的綜合性查詢語言,,正如 SQL 曾經(jīng)是世界上很多以關(guān)系表表達的結(jié)構(gòu)化數(shù)據(jù)查詢語言,,以及像關(guān)鍵字搜索曾經(jīng)增強 Internet 中的大量信息訪問功能一樣。
Oracle 數(shù)據(jù)庫自帶的 XQuery
由于 XQuery 基本完成,,IT 社區(qū)已經(jīng)開始調(diào)查 XML 的業(yè)務(wù)使用,,并確定 XQuery 所能提供的價值。作為商業(yè)數(shù)據(jù)庫技術(shù)的創(chuàng)新領(lǐng)導(dǎo)者,,Oracle 數(shù)據(jù)庫 10g 第 2 版提供了完善的自帶 XQuery 引擎,,該引擎與傳統(tǒng)的 Oracle 數(shù)據(jù)庫服務(wù)器進行集成,以幫助各種組織探索其 XQuery 需求,。
在 SQL 方面,,SQL 2003 引入了 XML 數(shù)據(jù)類型,以作為在 SQL 中封裝 XML 的方法,。SQL 委員會正致力于通過 XQuery 集成 XML 查詢,。通過引入新的 SQL 函數(shù),即將完成這項工作:XMLQuery 和新的結(jié)構(gòu):XMLTable 這兩者均使用 XQuery 操作 XML 和 SQL 值,。由于前者允許使用 XQuery 查詢和構(gòu)建 XML,,因此前者稱為以 XQuery 為中心的方法。由于后者允許將 XQuery 值細分為關(guān)系值,,因此后者稱為以 SQL 為中心的方法,。
Oracle 數(shù)據(jù)庫 10g 第 2 版通過這些 SQL 標準函數(shù)在數(shù)據(jù)庫服務(wù)器中實現(xiàn)了 XQuery 支持。還在 SQL*Plus 中實現(xiàn)了新的 XQUERY 命令,,以允許用戶在命令行中輸入 XQuery 表達式,。通過 Oracle 數(shù)據(jù)庫 10g 第 2 版中 XQuery 基于標準的實現(xiàn),應(yīng)用程序開發(fā)人員可以使用喜好的 API (例如 JDBC,、ODP.NET)來利用 Oracle 數(shù)據(jù)庫 XQuery 功能,。
Oracle XQuery 的好處
通過 SQL/XML XQuery 函數(shù)和 XML 文檔的結(jié)構(gòu)化存儲,XML DB 可以使用超過基于 DOM 的 XML 查詢功能評估幾個數(shù)量級的性能來處理 XML 查詢,。此外,,XML 查詢可以無縫地與 SQL 關(guān)系查詢進行合并,來處理所有查詢情況。最后,,Oracle XML DB 的 XML 查詢功能建立在業(yè)界最好的關(guān)系型數(shù)據(jù)庫基礎(chǔ)之上,,具有高度的可靠性、可用性,、可伸縮性和安全性,。簡言之,Oracle 數(shù)據(jù)庫 10g 第 2 版中的 XML DB 查詢功能為通用,、可伸縮,、并發(fā)以及高性能的 XML 應(yīng)用程序提供了最全面、最高效的功能,。
返回主題列表
在 Oracle 數(shù)據(jù)庫 10g 隨附的示例架構(gòu)中,,已經(jīng)提供了一個 XML 模式(作為 OE 模式的一部分)。在本部分中,,您將使用企業(yè)管理器查看其內(nèi)容,。執(zhí)行以下步驟:
1. |
打開瀏覽器,輸入以下 URL:
http://raclinux1.us.oracle.com:1158/em/
輸入 system/oracle,,然后單擊 Login。
|
2. |
單擊 Administration 選項卡,。
|
3. |
向下滾動,。
|
4. |
選擇 XML Database 下的 Configuration 鏈接。
|
5. |
輸入 2100 作為 FTP 端口,,輸入 8080 作為 HTTP 端口,。然后單擊 OK。
|
6. |
現(xiàn)在已經(jīng)完成了配置設(shè)置,。單擊 Cluster Database 路徑式導(dǎo)航欄,。
|
7. |
在 XML Database 下的 Administration 選項卡中,選擇 Resources 鏈接,。
|
8. |
單擊 Go 查看所有資源,。
|
9. |
這將顯示所有資源。展開 home,。
|
10. |
展開 OE - PurchaseOrders - 2002 - Apr 以顯示 XML 文檔列表,。單擊列表中的第一個 XML 文檔。
|
11. |
這將顯示該文檔的一般信息,。要查看該文檔的實際內(nèi)容,,單擊 Display Contents。
|
12. |
這將顯示文件內(nèi)容,。單擊 Show formatted XML Content,。
|
13. |
查看格式化的 XML 文檔。完成后,將關(guān)閉窗口,。
|
14. |
單擊 Database 路徑式導(dǎo)航欄,。
|
15. |
在 XML Database 下的 Administration 選項卡中,單擊 XMLType Tables,。
|
16. |
單擊 Go,。
|
17. |
單擊表名 PURCHASEORDER。
|
18. |
這將顯示 XSD 的定義,。向下滾動查看詳細信息,。
|
返回主題列表
要在 JDeveloper 中查看 XML 模式,您需要執(zhí)行以下任務(wù):
返回主題列表
創(chuàng)建 WebDAV 連接
在訪問 XML DB 中的 XML 模式文檔之前,,您需要創(chuàng)建 WebDAV 連接,。執(zhí)行以下步驟:
1. |
雙擊桌面上的 JDeveloper 10.1.2 圖標。
|
2. |
單擊 Connection 選項卡,。在 Navigator 窗口中右鍵單擊 WebDAV Connection,,然后選擇 New WebDAV Connection...
|
3. |
在 Welcome 窗口中,單擊 Next,。
|
4. |
在 Name 域中輸入 WebDAVConnection1,,在 URL 域中輸入 http://raclinux1.us.oracle.com:8080/,然后單擊 Authentication Required,。然后單擊 Next,。
|
5. |
輸入 OE 作為用戶名和密碼。然后單擊 Next,。
|
6. |
單擊 Test Connection,。
|
7. |
測試成功。單擊 Next,。
|
8. |
單擊 Finish,。
|
9. |
展開剛才創(chuàng)建的 WebDAVConnection1 連接。
|
返回主題
查看 XML 模式
現(xiàn)在,,您可以查看 XML 模式,。執(zhí)行以下步驟:
1. |
展開 home - OE - PurchaseOrders - 2002 - Apr。右鍵單擊列表中的第一個文檔,,然后選擇 Open,。這將顯示 XML 文檔。
|
2. |
在 Navigator 窗口中向下滾動,,然后右鍵單擊 purchaseOrder.xsd,。然后選擇 Open。
|
3. |
這將在圖形布局中顯示 XML 模式,。展開 PurchaseOrder 類型,。
|
4. |
展開 Actions 類型。
|
5. |
展開 Action,您將看到兩個類型對象:User 和 Date?,F(xiàn)在,,您將返回 XML 文檔以查看它們的定義位置。單擊 XML Document 選項卡,。
|
6. |
Action 對象包含一個 KPARTNER 用戶類型,。
|
返回主題
在本部分中,您將運行一些 XQuery 表達式及其關(guān)聯(lián)的解釋計劃來訪問有關(guān) XML 文檔的信息,。執(zhí)行以下步驟:
1. |
打開一個終端窗口,,然后輸入以下命令:
cd wkdir
sqlplus oe/oe
|
2. |
您將運行的第一個 xquery 將選擇所有 XML 文檔,。執(zhí)行以下腳本:
@XQuery01
|
3. |
您將運行的第二個 xquery 將選擇特定用戶的 XML 文檔,。執(zhí)行以下腳本:
@XQuery02
|
4. |
您將運行的下一個 xquery 將查看特定的訂貨單,。執(zhí)行以下腳本:
@XQuery03
|
5. |
您將運行的下一個 xquery 將列出包含特定部件 ID 的所有訂貨單,。執(zhí)行以下腳本:
@XQuery04
|
6. |
您將運行的下一個 xquery 將列出包含特定部件 ID 的所有訂貨單。執(zhí)行以下腳本:
@XQuery05
|
7. |
您將運行的下一個 xquery 將列出特定訂貨單中每行項目的描述,。執(zhí)行以下腳本:
@XQuery06
|
返回主題列表
您可以通過創(chuàng)建索引來增強 XQuery 的性能。在本部分中,您將創(chuàng)建一個索引,,然后運行相同的 XQueries 來查看改變性能的解釋計劃如何獲得增強。執(zhí)行以下步驟:
1. |
從 SQLPlus 會話中,,登錄 OE 用戶,。
@createXMLIndexes
|
2. |
您將運行的下一個 xquery 將查看特定的訂貨單。執(zhí)行以下腳本:
@XQuery03
|
3. |
您將運行的下一個 xquery 將列出包含特定部件 ID 的所有訂貨單,。執(zhí)行以下腳本:
@XQuery04
|
4. |
您將運行的下一個 xquery 將列出包含特定部件 ID 的所有訂貨單,。執(zhí)行以下腳本:
@XQuery05
|
5. |
您將運行的下一個 xquery 將列出特定訂貨單中每行項目的描述,。執(zhí)行以下腳本:
@XQuery06
|
返回主題列表
您可以使用 XQuery 通過視圖從 SQL 數(shù)據(jù)生成 XMl,。執(zhí)行以下步驟:
1. |
首先通過 XMLTable() SQL/XML 函數(shù)和 XQuery 表達式來根據(jù)關(guān)系表創(chuàng)建 XML 視圖,。執(zhí)行以下腳本:
@createXQueryView
|
2. |
現(xiàn)在,可以根據(jù)剛剛創(chuàng)建的 XML 視圖來顯示 XQuery,。執(zhí)行以下腳本:
@xqueryXQLView
|
返回主題列表
虛擬 XML 文檔可指導(dǎo)您如何將 XMLType 視圖中行的內(nèi)容作為 Oracle XML DB 信息庫中的文檔來提供,。執(zhí)行下列任務(wù):
返回主題列表
創(chuàng)建觸發(fā)器
1. |
首先需要創(chuàng)建一個要從前面創(chuàng)建的 XML 視圖創(chuàng)建一個虛擬 XML 文檔的觸發(fā)器。執(zhí)行以下腳本:
@folderXQDepartments
|
返回主題
在 JDeveloper 中查看虛擬 XML 文檔
1. |
切換到 JDeveloper,。從 Navigator 窗口中,,右鍵單擊 WebDAV 連接中的 /home/OE,然后選擇 Refresh,。
|
2. |
展開 XQDepartments,。
注意:如果在此步驟中遇到一個錯誤,則試著再次執(zhí)行第 1 步,,然后再次展開 XQDepartments,。
|
3. |
選擇列表中的第一個 .xml 文檔。該 Accounting.xml 文檔直接在 XMLType 視圖的行中顯示 XML 數(shù)據(jù),。
|
返回主題
在 SQL*Plus 中查看虛擬 XML 文檔
1. |
您還可以查詢虛擬 XML 文檔,。請注意如何使用 XQuery 標準 doc() 函數(shù)來檢索 XML DB 信息庫中的 XML 文檔,。首先,,您將查看具有 Accounting 顯示名的虛擬文檔列表,。執(zhí)行以下腳本:
@departmentsXQueries01
|
2. |
現(xiàn)在,可以顯示其中一個虛擬 XML 文檔的內(nèi)容,。執(zhí)行以下腳本:
@departmentsXQueries02
|
3. |
最后,,您可以執(zhí)行 XQuery 來選擇虛擬 XML 文檔的其中一項。執(zhí)行以下腳本:
@departmentsXQueries03
|
返回主題
通過 RESOURCE_VIEW 和 PATH_VIEW 公開 XML DB 信息庫的內(nèi)容,。 Public synonyms make these views available to all database users.可以像使用任何其他數(shù)據(jù)庫視圖那樣來使用這些視圖,。執(zhí)行以下步驟:
1. |
執(zhí)行以下腳本:
@resourceViewXQuery01
|
返回主題列表
XQuery 是通用的查詢語言。它可用于將 XML 文檔從一種結(jié)構(gòu)轉(zhuǎn)換為另一種結(jié)構(gòu),。執(zhí)行以下步驟:
1. |
標記和其他 XQuery 表達式已經(jīng)對訂貨單進行轉(zhuǎn)換,,以生成明顯不同的 XML 文檔報告。執(zhí)行以下腳本:
@XQueryTransform
|
返回主題列表
JDBC 通過以下 SQL/XML 函數(shù)的本地實現(xiàn)來支持 XQuery 語言:XMLQuery 和 XMLTable,。以下示例演示了如何使用 XMLTable() 函數(shù)的 PASSING 語句將動態(tài)變量綁定到 XQuery 表達式,。執(zhí)行下列任務(wù):
返回主題列表
添加應(yīng)用程序
1. |
切換到 JDeveloper。單擊 Navigator 的 Applications 選項卡,,然后單擊 Add to Applications 圖標,。
|
2. |
從 /JDBC 目錄中選擇 XQuerySamples.jws。然后單擊 Open,。
|
返回主題
更改 JDBC 連接信息
1. |
展開 XQuerySamples > SimpleXQuery > Application Sources,,然后右鍵單擊 SimpleXQuery.java,并單擊 Open,。
|
2. |
稍微向下滾動到 OracleConnection 語句,,然后更改主機名和 SID 信息。
|
3. |
更改 XQueryBind 下所有 .java 文件的 JDBC 連接信息,。
|
返回主題
添加類路徑
1. |
您需要設(shè)置類路徑,。選擇 Tools > Default Project Properties。
|
2. |
選擇 Libraries,,然后單擊 New...,。
|
3. |
輸入 Oracle Database 10gR2 作為庫名稱,然后為類路徑單擊 Edit,。
|
4. |
單擊 Add Entry...,。
|
5. |
導(dǎo)航到 $ORACLE_HOME/jdbc/lib/ojdbc14.jar 文件,然后單擊 Select,。
|
6. |
單擊 Add Entry...,。
|
7. |
導(dǎo)航到 $ORACLE_HOME/rdbms/jlib/xdb.jar 文件,然后單擊 Select,。
|
8. |
單擊 Add Entry...,。
|
9. |
導(dǎo)航到 $ORACLE_HOME/lib/xmlparserv2.jar 文件,然后單擊 Select,。
|
10. |
單擊 OK,。
|
11. |
單擊 OK 保存新的庫,。
|
12. |
單擊 OK 關(guān)閉 Project Properties 窗口。
|
13. |
現(xiàn)在,,您需要將該庫添加到項目中,。右鍵單擊 SimpleXQuery,然后選擇 Project Properties,。
|
14. |
從庫列表中選擇 Oracle Database 10gR2,,然后單擊 > 進行選擇。然后單擊 OK,。
|
15. |
右鍵單擊 XQueryBind,,然后選擇 Project Properties。
|
16. |
從庫列表中選擇 Oracle Database 10gR2,,然后單擊 > 進行選擇,。然后單擊 OK。
|
返回主題
構(gòu)建應(yīng)用程序
1. |
右鍵單擊 XQuerySamples,,然后選擇 Make,。
|
2. |
查看 Message 窗口,確保未收到錯誤消息,。
|
返回主題
運行應(yīng)用程序
1. |
右鍵單擊 SimpleXQuery,,然后選擇 Run。
|
2. |
輸出將顯示在 Log 區(qū)域,。
|
3. |
右鍵單擊 XQueryBind,,然后選擇 Run。
|
4. |
輸出將顯示在 Log 區(qū)域,。
|
返回主題
在本課程中,,您學(xué)習(xí)了如何:
|
使用 XQuery 查詢 Oracle XML DB 中存儲的 XML 文檔 |
|
添加 XML 索引,并演示在執(zhí)行 XQuery 時解釋計劃如何變化
|
|
使用 XQuery 創(chuàng)建 XML 視圖,,以及使用 XQuery 查詢 XML 視圖
|
|
從 XML 視圖創(chuàng)建虛擬 XML 文檔,,以及使用 XQuery 查詢這些 XML 文檔
|
|
在資源視圖中使用 XQuery 從 XML 信息庫檢索信息
|
|
使用 XQuery 轉(zhuǎn)換 XML 文檔
|
|
使用 XQuery 通過 JDBC 查詢 Oracle XML DB |
返回主題列表
將光標置于該圖標上可以隱藏所有的屏幕截圖。
|