如何提取 XML 資料以進行關係使用?


問題描述

你需要從 XML 文件中提取各個元素值。

解決方案

Oracle 提供XMLTABLE函式,可使用 XQuery 和列對映到 Oracle 資料型別來操作 XML 文件。使用 XMLTABLE,我們可以以關係方式識別和使用 XML 文件中的資料元素。

讓我們假設下面的 XML 文件儲存在表tmp_xml_gen中,我們希望從中提取元素。我們有客戶詳細資訊和訂單相關資訊。

示例

<?xml version="1.0"?> <customers>   <customer>     <customer_id>134</customer_id>     <email>taylor.cauchon@internalmail</email>     <name>Taylor Cauchon</name>     <orders>       <order>         <order_id>921</order_id>         <status>COMPLETE</status>       </order>       <order>         <order_id>485</order_id>         <status>COMPLETE</status>       </order>       <order>         <order_id>1528</order_id>         <status>COMPLETE</status>       </order>       <order>         <order_id>1672</order_id>         <status>COMPLETE</status>       </order>       <order>         <order_id>1319</order_id>         <status>COMPLETE</status>       </order>     </orders>   </customer> </customers>

程式碼

WITH cust AS -- Customer details       (SELECT xt.customer_id,               xt.email,               xt.name,               x.result          FROM tmp_xml_gen x,          XMLTABLE('/customers/customer' PASSING x.RESULT                    COLUMNS                    customer_id VARCHAR2(10)  PATH 'customer_id',                          email VARCHAR2(255) PATH 'email',                           name VARCHAR2(255) PATH 'name') xt), -- Order details      ord AS      (SELECT customer_id,              email,              name,              xt2.*         FROM cust t,         XMLTABLE('//orders/order' PASSING t.result                  COLUMNS order_id VARCHAR2(4)  PATH 'order_id',                            status VARCHAR2(10) PATH 'status' ) xt2) SELECT * FROM ord;

輸出:來自上述 SQL 的幾行

134 taylor.cauchon@internalmail Taylor Cauchon  921     COMPLETE 134 taylor.cauchon@internalmail Taylor Cauchon  485     COMPLETE 134 taylor.cauchon@internalmail Taylor Cauchon  1528    COMPLETE 134 taylor.cauchon@internalmail Taylor Cauchon  1672    COMPLETE 134 taylor.cauchon@internalmail Taylor Cauchon  1319    COMPLETE 135 marc.domanski@internalmail  Marc Domanski   50      COMPLETE 135 marc.domanski@internalmail  Marc Domanski   99      COMPLETE 135 marc.domanski@internalmail  Marc Domanski   142     COMPLETE 135 marc.domanski@internalmail  Marc Domanski   195     COMPLETE

XMLTABLE 函式需要一個或多個 XQuery 表示式才能應用於 XMLTYPE 資料的列或表示式。XMLTABLE 的常規形式是

xmltable(   <XQuery to apply>,   <Source XMLTYPE column or expression>,   <Column definition optionally mapped with XQuery path expression>).

更新於: 2020-12-04

547 次瀏覽

開啟職業

完成課程以獲取認證

開始
廣告
© . All rights reserved.