在 Oracle 中使用正則表達式[官網]

  聲明:該文章源於 oracle官網 ,經博文只是對其進行了梳理。
  本文適用於不瞭解 Oracle 中 XML 實現的 DBA 或開發人員:其中簡要概述了 SQL 和 XML 互操作性和如何着手處理存儲在 Oracle 10g第 2 版數據庫中的 XML 文檔,此外,還介紹了 DBA 和開發人員在數據庫中使用 XML 之前應該熟悉的由 Oracle 數據庫 10g 第 2 版提供的大量新特性。使用這些 SQL/XML 特性,可以輕鬆增強您在使用關係數據時獲取的技能,以便幫助您使用 XML。 Oracle 已經通過數據庫的 XML DB 組件實現了 XML,該組件是企業版和標準版的標準特性。通過數據庫配置助手 (DBCA) 或者運行一個目錄腳本 catqm.sql,可以輕鬆安裝 Oracle XML DB。XML DB 產品提供本文討論的所有特性。
  要驗證是否安裝了 XML DB,只需運行下面的 SQL: Sql代碼 type="application/x-shockwave-flash" width="14" height="15" src="http://code.javaeye.com/javascripts/syntaxhig hlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflash player" allowscriptaccess="always" quality="high" flashvars="clipboard=select%20comp_name%20from%20d ba_registry%20where%20comp_name%20like%20'%25XML%25 '%3B%09%0A%0ACOMP_NAME%09%09%0AOracle%20XML%20Datab ase">
  也可以查看 XML DB 模式及其對象來確認是否安裝了 Oracle XML DB。
  SQL/XML 標準已處在開發之中,以便提供一個允許我們從關係查詢生成 XML 的機制,並反之使我們能夠從 XML 文檔提交 SQL 數據。Oracle 數據庫 10g 第 2 版中的 Oracle XML DB 實現 SQL 2003 和來自即將推出的 SQL/XML 標準版的特性。Oracle 中這些標準的實現使我們能夠以在之前 SQL 標準中不可能的方式查看 XML 文檔。 新數據類型。 Oracle9i 數據庫第 1 版中引入了一個新數據類型 XMLType,它允許在 SQL 中訪問數據庫中的 XML 文檔,同時允許 XML 開發人員在文檔中使用 XML 標準。該數據類型通知數據庫該內容是 XML 格式的,並允許我們在 XML 文檔上執行查詢。使用 XMLType(而非一個關係或 CLOB 實現)在應用程序和存儲模型間提供一個分離層。該分離允許數據移到一個不同的存儲模型,而不侷限於 CLOB 或關係模型。XMLType 可用於創建表、列或視圖。它還可用作參數和變量的數據類型。 內置的 XML 方法可以處理文檔內容,允許我們創建、提取和索引 XML 數據。索引可以使用 b 樹、文本索引和基於函數的索引執行。實際上,與 XPath 合併的 XMLType 數據可用於查看文檔。該功能通過 PL/SQL 和 Java API 提供。XMLType 可用在 PL/SQL、使用 JDBC 的 Java 以及 Oracle Data Provider for .Net 中。這個功能強大且相對較新的數據類型將在本文中廣泛使用。
  存儲結構。 Oracle 的 XML 實現爲我們提供了以兩種不同方式存儲數據的靈活性:結構化存儲和非結構化存儲。XMLType 數據在存儲爲單個 LOB 列時是非結構化的,在實現爲對象集時是結構化的。
  它的一個特定示例是 XMLType 表,該表可以使用這兩種存儲模型之一實現。XMLType 表在使用如下所示的"XMLType store as CLOB"語法實現爲 LOB 時是非結構化的: 讓我們重點看一下 XML 數據的結構化存儲和非結構化存儲並進行更詳細的瞭解。
  結構化存儲。 將結構化 XML 存儲實現爲一組對象。這些對象可通過具有可以在表間實現的引用約束的表以關係格式實現。它們也可以使用一個 XMLSchema 實現,以便將一個 XMLType 文檔分解爲一組對象。
  在使用關係表的情況中,可以因此對這些表進行預先設計,或者使用現有表。該文檔實際上通過關係表存儲爲"虛擬"文檔,並保留其邏輯結構。該方法可維護文檔 對象模型 (DOM) 保真度,但是它不是文檔的逐字節物理表示。這可以通過創建一個關於現有關係數據的 XMLType 視圖來完成。
  結構化存儲比非結構化存儲具有一些性能優勢,選擇它可通過表和索引設計提供更多的查詢和更新優化。結構化存儲上的 XML 操作有助於減少內存和存儲,因爲沒有存儲 XML 標記,而且存在更細粒度的數據檢索和使用。基於 b 樹和基於函數的索引使用得到了增強,而且使用 XPath 重寫可在文檔的部分上執行適當更新。所有這些都對性能有所幫助,本文稍後將詳細討論。
  使用結構化存儲也有一些缺點。插入和檢索整個文檔需要更多開銷。此外,靈活性有限,因爲只能存儲匹配 XMLSchema 的文檔 - 但是在某些情況中,這實際上是個優勢。文檔不存儲爲逐字節原始表示,而且不保留文檔中的數據順序。但是,這將不會出現數據丟失的情況。
  我們通常會將高度結構化的數據看作是 XML,其中數據的每個元素都可以清晰定義。
  非結構化存儲。 XML 可以使用 CLOB 存儲以非結構化方式存儲在 Oracle 中,以便 SQL 查詢不會知道該數據的結構。該數據可以使用 Oracle 的 XMLType 數據類型存儲。
  如果想讓存儲數據匹配文檔的準確物理表示,可以選擇非結構化數據。此外,如果該數據不經常更新,或者整個文檔(而非部分文檔)有大量的插入和讀取,則將數 據整體放在一處可能更高效。在某些情況中,您需要保持文檔的靈活性,而且在這些情況中,XMLType 表或列可能是有用的。
  非結構化存儲的缺點是,對部分文檔的更新通常不如結構化數據那樣高效。此外,使用函數從 CLOB 構造 DOM 的 XPath 操作將使用大量的系統資源。非結構化數據的其他問題是,SQL 約束無法實現,而且內存管理也不是如此有效。
  我們通常不將非結構化數據作爲 XML 數據考慮,並將其中大部分或所有數據只看作是單個 CLOB。
  瞭解了這些存儲模型後,現在讓我們來看一些命名特性。
  這是一個大主題,也是需要了解的較複雜的 XML DB 概念之一。在本文中,我們將介紹一些命名空間概念,以便您瞭解其要旨所在及其用法。
  命名空間用於描述 XML 文檔中的一組相關屬性或元素。命名空間可用於確保文檔構造有完全唯一的名稱。XMLSchema 尤其要利用該特性,因爲目標命名空間通常與 XMLSchema 的 URI 相同。命名空間示例如下所示。請注意,該命名看起來類似於一個 Internet URL。該命名標準由萬維網聯盟 (W3C) 建議,但並非必需。該 URI 用於唯一標識數據庫中註冊的 XMLSchema 的名稱,而且無需是文檔所處位置的物理 URL。
  XMLType 方法和 XML 函數使用命名空間前綴。當 XML 文檔沒有目標命名空間時,該命名空間前綴將位於 noNameSpace 命名空間中。屬性 xsi:noNamespaceSchemaLocation 可用於模式 URI。
  如果元素不具備另一個命名空間前綴,默認情況下,在將某個命名空間應用到描述它的元素時,可使用該命名空間。
  通常您將看到兩個特定的命名空間。它們是 http://www.w3.org/2001/XMLSchema (完整的 XMLSchema 命名空間)和 http://xmlns.oracle.com/xdb (Oracle 提供的 XML DB 命名空間)。第二個命名空間具有寫入基礎 SQL 函數的函數。一些 XPath 函數也進行重寫。例如 ora:contains、ceiling、floor、not、string-length、substring 和 translate。XML DB 使用的屬性也屬於該命名空間。
  定義元素時,我們可以指定該元素的命名空間。在 XML 中,我們可以將它定義爲 如您所見,我們提供了一個 elementName,它是我們將使用的元素(例如,"orders")。Xmlns 是保留字,它告訴我們這是一個命名空間定義。"ab"部分稱爲前綴。該前綴是一個綁定到 URL 的簡稱。在本例中,ab 綁定到'http.name.com',而且 ab 可以加爲元素名的前綴。
  下面我們將創建一個非常小的模式,並聲明綁定前綴 xs 到 http://www.w3.org/2001/XMLSchema 以及聲明前綴 xdb 到 http://xmlns.oracle.com/xdb 。爲了聲明該命名空間,我們使用 xmlns 綁定它們。請注意,xs 前綴在本例中用在模式元素名稱上。
  這裏我們只是粗略介紹了一下命名空間。
  將數據添加到 XMLType 表和列中。 正如您可能預期到的,有很多選項可供我們將 XML 數據添加到數據庫中。可以使用 SQL、PL/SQL、Java 和 C 程序插入數據。也可以使用 XMLType 表的 SQL*Loader 和 Import/Export 函數將數據加載到數據庫中。可以使用 Oracle Streams 來移動 XML 數據,還可以使用 DBMS_XDB 函數。現在,就讓我們來探究一個簡單易用的方式來加載 XML 數據。
  在本例中,我們將使用 SQL 插入將一個 XML 文檔從文件加載到表中,以便從 bfile 加載該 XML 文檔。該文件需要通過一個數據庫目錄訪問。爲此,我們將創建一個目錄以指向存儲該 XML 文檔文件的文件。請注意,要執行本文中的示例,您必須確保所用用戶具有 xdbadmin 角色。 現在我們可以用兩種方式創建包含 XMLType 數據的表。第一個將是具有 XMLType 列的表。第二個將是定義爲類型 XMLType 的表。
  1. 創建一個包含 XML 列的表。 2. 創建一個 XML 表。 以上每一個語句都在每個表中隱式創建兩個索引 - 一個用於主鍵,另一個用於 LOB。
  現在我們要將一個發票文檔插入到這兩個表中。請注意,我們要使用字符集 AL32UTF8,並指定它傳送字符集編碼來供要讀取的文件使用。數據將插入這兩個表以顯示這兩個 SQL 語句間的相似性。 我們現在已經使用 XMLType 表和列將兩個 XML 文檔加載到了數據庫中。就是這麼簡單。 如果處理命名空間和存儲技術不足,XMLType 數據也可以實現爲模式類型化或非類型化數據。XMLSchema 可將文檔與提供文檔結構和內容信息的 XMLSchema 相關聯。這爲文檔提供了更好的記錄、驗證和控制。該模式中的信息可用於提交更有效的查詢和更新處理。XMLSchema 也允許將 XML 文檔存儲爲結構化存儲數據,因爲該文檔可以通過 XMLSchema 分解爲一組對象。用於存儲該文檔的對象模型由模式定義確定。XMLType 方法 schemaValidate() 和 isSchemaValid() 允許使用模式定義編輯 XMLType 文檔。
  我們如何創建模式並在 XML 文檔中使用它?爲此,我們需要創建一個 XMLSchema 定義 下面的示例分四步進行了說明。
  1. 首先,在目錄 XML_DIR 下的文件 invoiceformtest.xsd 中創建一個模式定義。該清單如下所示:
  2. 使用過程 DBMS_XMLSCHEMA.registerSchema 在數據庫中註冊上面的模式。您用來連接到數據庫的用戶名需要修改會話權限,以便該模式可以成功註冊。 要刪除該模式,只需運行 DBMS_XMLSCHEMA.deleteSchema 語句,如下所示: 3. 由於上面模式定義中的 xdb:defaultTable="INVOICEFORMTEST" 語句,以上語句還創建了表 invoiceformtest。沒有它,將創建一個生成的名稱(您不想使用該名稱)。
  4. 現在,我們準備將文檔輸入到 XML 文檔內基於 XMLSchema 的表中,該文檔存儲在 XML_DIR 中並使用實現的模式指定的格式。 來看一下我們剛剛使用 XML 文檔上的 object_value pseudocolumn 創建的內容。 完成! XQuery 是 W3C 針對查詢語言開發的一個標準,用於從 XML 文件提取信息。它允許我們訪問物理 XML 文檔或者通過 XML 視圖虛擬化爲 XML 文檔的關係數據。使用的表達式可以是簡單的查詢或較大查詢的一部分,而且可以包括標準函數,例如,日期/時間、算術或字符串函數以及用戶定義的函數。 XQuery 是 Oracle 數據庫 10g 第 2 版中的新特性,並受 XMLQuery() 和 XMLTable() 函數支持。使用這兩個函數的示例稍後在"XMLQuery() 和 XMLTable()"部分中有述。 XQuery 使用 XPath 表達式(如下所述)定位 XML 文檔中的詳細項。可將其看作是 Oracle 數據庫 10g 第 2 版中引入的 XMLQuery() 和 XMLTable() 函數的基礎,本文稍後有述。 以下將介紹一些更重要的 XQuery 表達式(包括 XPath、XMLSequence 和 FLWOR)。 XPath。 XPath 提供使用定址技術在 XML 文檔中定位項的方式,而且它通過一個文檔結構使用邏輯路徑處理這些項。它允許程序員在較高的抽象級別處理文檔,方法是通過文檔指定路由而非指向特定元素。 XPath 使用節點概念定義路徑在何處開始,然後定義一個"邏輯樹",該樹包括諸如 attribute、self、parent、child 和 ancestor 等關係。換言之,XPath 會將 XML 文檔建模爲節點樹。節點類型分爲若干種,例如,元素節點、屬性節點和文本節點。XPath 可以確定一個方式來爲每個節點計算字符串值。
  憑藉 XPath 表達式,您可使用基於標準的方式查詢和更新 XML 文檔。我們將使用 extract、extractValue、existsNode 和 XMLSequence 函數來演示 XPath 功能,期間將用到我們已創建的 invoicexml_tbl 文檔以及插入到其中的數據。
  查詢要在 XPath 示例中使用的文檔。 讓我們看一下如何使用 XPath 函數通過 SQL 搜索 XML (XMLType) 數據。爲此,來看一下要使用 object_value pseudocolumn 從 XMLType 表檢索 XML 文檔時涉及的文檔。 SQL> select object_value from invoicexml_tbl; OBJECT_VALUE Joe Smith 10 Apple Tree Lane New York NY 12345 Ed Jones 11 Cherry Lane Newark NJ 67890 Sept 1, 2006 to Sept 30, 2006 70 30 210 2310 Oct 1, 2006 Ed Jones
  使用 extract。 使用 extract 時,通過將 extract 與 object_value 合併,可從文檔選擇單個節點及其葉節點。換言之,我們可以查看存儲爲 XMLType 的 XML 文檔。無論我們使用的是結構化數據還是非結構化數據以及數據是否基於模式,情況都是如此。開始提取 MailAddressTo 節點及其葉節點。 如您所見,該輸出包括文檔的 MailAddressTo 部分,不適合打印(格式化)。此外,用於實現它的語法非常簡單。重要的是,我們能夠在無需轉儲整個內容的情況下查看文檔。
  使用 extractValue。 葉節點中存在的數據值可以使用 extractValue 提取。較高級的節點(例如 MailAddressTo)無法使用該函數提取。請注意,它的輸出不是 XML 語法格式,其中只包含該數據值。 使用 existsNode。 ExistsNode 以類似的方式使用,以便在節點級(只能在節點級)搜索文檔的特定值。它返回一個 True 或 False 標誌來指定搜索是否成功。= 1 謂詞不是次數,表示的是 True 條件,而 = 0 表示 False。 使用 XMLSequence。 與 extractValue(只可從單個節點提取的值)不同,XMLSequence 可用於查看文檔的多個節點或某個片段。它通過創建包含 XMLType 對象的虛擬表來完成此操作。讓我們使用 MailAddressTo 分支節點來對 extractValue 和 XMLSequence 進行比較。 該 ORA-19025 消息具有自我說明性。幸運的是,我們可以通過重構該查詢並使用 XMLSequence 解決該問題,如下所示: 由於 XMLSequence 創建一個虛擬表,我們也可以在葉節點上使用該函數。 FLWOR。 FOR、LET、WHERE、ORDER BY 和 RETURN(FLWOR;發音爲"flower")是 XQuery 語法中最重要且最強大的表達式之一。FOR 或 LET 必須存在,WHERE 和 ORDER BY 是可選的,而 RETURN 是必需的。 FLWOR 本身就是一個有待介紹的大主題。本節將爲您簡要介紹一下該語句的強大功能。
  FOR 通過迭代方式以變量的列出順序綁定一個或多個變量。前面列出的值之後可用在一組後續的值中。這種工作方式也類似於 SQL From 子句。前面列出的值之後可用在一組後續的值中,如下所示: 這三個迭代將 $var 和 $varPlus5 分別設置爲 1,6;2,7 和 3,8。
  LET(類似於 FOR)以迭代方式綁定變量,可以使用以前計算的值來計算值。與使用 FOR 一樣,可將 LET 看作 SQL FROM 字句。LET 也可以用於執行連接。
  WHERE 過濾數據的方式與 SQL WHERE 子句相同。
  ORDER BY 可以隨意對數據進行排序。
  RETURN 從過濾和排序後的 FLWOR 表達式返回最終結果集。
  FLWOR 與 XMLQuery() 協作。 以下是查詢和連接兩個文檔的示例:用 Party 鍵將 partys.xml 連接到 orders.xml 文檔。該 XML 數據位於 Oracle XML DB 信息庫中。爲此,我們將使用 XMLQuery();FLWOR;以及 XQuery 函數 doc、count、avg 和 integer。它們位於內置 XQuery 函數的命名空間中,http://www.w3.org/2003/11/xpath_functions。
  以下查詢讀取結果如下所示:使用函數 fn:doc,對於 (FOR) partys.xml 中的所有 partyno 屬性,連接 (LET) orders.xml 中匹配 partyno 的所有定單元素(變量 $p 綁定在 FOR 語句中)。這將生成一個項流($p 和 $o),其中 $p 表示一方的編號,而 $o 表示該方的一組定單。獲取其中 (WHERE) 有多個定單的項。使用命名空間 fn 中的 XQuery 函數 avg 對平均數 amt 進行降序排序 (ORDER BY)。 Amt 附加到定單元素 $o。返回該方的編號(綁定到 $p)和子元素定單計數。 SELECT XMLQuery()('for $p in fn:doc ("/public/partys.xml")/partys/party/@partyno let $o := fn:doc ("/public/orders.xml")/orders/order[@partyno = $p] where fn:count($o) > 1 order by fn:avg($o/@amt) descending return {$p, {fn:count($o)}, {xs:integer(fn:avg($o/@amt))}} ' RETURNING CONTENT) ORDERS FROM DUAL; ORDERS 111123500
  是的,該查詢正在進行大量工作並在 XML 文檔上顯示使用 FLWOR 表達式時可能出現的結果。 Oracle XML DB 提供五個 開發人員可以使用 的 XQuery 函數。它們在 http://xmlns.oracle.com/xdb 命名空間中實現,該命名空間使用前綴 ora:。除此之外還有另外兩個 XPath 函數。它們仍然不是 SQL/XML 標準的一部分,但預期將來會是。該 ora:view 函數是一個特別有價值的函數,可用於將關係數據轉換爲 XML 格式。下面將對所有這些函數進行介紹。
  ora:view XQuery 函數。 這是在關係表上創建視圖的有用函數。這可以使它們看起來像 XML 文檔。 本文稍後將給出使用 ora:view 的示例。
  ora:contains XQuery 函數。 命名空間前綴"ora:"和名稱"contains"一起使用可創建 XPath 函數,該函數可用作 SQL/XML existsNode、extract 和 extractValue 函數的 XPath 參數。這使您能夠使用文本謂詞執行結構搜索。
  如果 text_query 與 input_text 匹配,該函數將返回一個正數。如果它們不匹配,則返回 0。當它們與 existsNode、extract 或 extractValue 一起使用時,您需要包括命名空間映射參數 xmlns:ora="http://xmlns.oracle.com/xdb"。ora:contains 的語法如下所示。當未定義 policy_owner 時,所有者是當前用戶。policy_name 是要應用的匹配規則的名稱。默認的匹配規則由 ctxsys.default_policy_oracontains 定義。 下面的示例顯示瞭如何使用 ora:contains 作爲 existsNode 的參數。 ora:matches XQuery 函數。 該函數使用正則表達式匹配文本。這類似於 SQL REGEXP_LIKE 條件,但是它使用 XQuery 參數而非 SQL 數據類型。如果 target_string 匹配正則表達式 match_pattern,則返回 True;否則,返回 False 。正如您在下面語法中所見,可以添加 match_parameter 以指定在搜索中使用的附加標準。以下示例是提供區分大小寫。 ora:replace XQuery 函數。 該函數在滿足 match_pattern 的情況下 (True) 使用 replace_string 替換 target_string,這是對 ora:matches 函數的擴展。與使用 ora:matches 一樣,使用正則表達式來匹配文本。 ora:sqrt XQuery 函數。 顧名思義,該函數返回提供數字的平方根值。 XPath 擴展函數:ora:instanceof 和 ora:instanceof-only。 當知道屬 性和元素的數據類型時,Oracle XML DB 可以支持基於模式的數據。由於 XPath 1.0 不知道數據類型信息,因此在命名空間 http://xmlns.oracle.com/xdb 中有 XML DB 擴展函數,它們使您能夠將 XML 文檔節點限制爲特定數據類型。函數 ora:instanceof 可用於將節點限制爲數據類型或子類型,而 ora:instanceof-only 只將節點限制爲數據類型。子類型是用於擴展或限制類型的特性。 在上面的語法中,nodeset-expr 通常是一個相關的 XPath 表達式。如果任何節點的數據類型與類型名匹配,則該函數返回 True,否則返回 False。類型名可使用命名空間前綴限定。
  對於非基於模式的數據,這些函數將返回 False,因爲這些數據沒有與元素和屬性相關的數據類型。 有兩個重要的 XQuery 函數可用於在 XML DB 信息庫中查詢所有資源。Fn:doc 是一個 XQuery 函數,可以獲取包含 XML 數據的信息庫文件。該文件資源由其 URL 參數指出。XQuery 變量可以使用 FLWOR 表達式 FOR 和 LET 綁定到數據。XQuery 函數 fn:doc 可用於讀取存儲在 XML DB 信息庫中的單個 XML 文檔。
  在信息庫中查詢資源的第二個 XQuery 函數是 fn:collection。該函數可以返回存儲在信息庫中同一文件夾中的大量類似文檔。
  現在,我們將通過創建信息庫資源來演示 fn:doc 和 fn:collection 如何處理一些簡單示例。首先,使用 DBMS_XDB PL/SQL 程序包創建一個資源。這可用於在 XML DB 中管理資源。該 createResource 過程在本例中用於創建包含 Orders 和 Partys XML 文檔的新文件資源。
  創建用於以下示例的定單和定方資源名。其中有一個名爲 ordersnamespace.xml 的附加資源,它是一個使用命名空間的示例。 DECLARE res BOOLEAN; ordersxmlstring VARCHAR2(500):= ' '; partysxmlstring VARCHAR2(500):= ' '; ordersxmlnsstring VARCHAR2(500):= ' '; BEGIN res := DBMS_XDB.createResource('/public/orders.xml', ordersxmlstring); res := DBMS_XDB.createResource('/public/partys.xml', partysxmlstring); res := DBMS_XDB.createResource('/public/ordersnamespace.x ml', ordersxmlnsstring); END;
  我們可以看到剛剛通過查詢 resource_view 創建的資源,如下所示: SQL> select any_path, res from resource_view where any_path like '%partys%'; ANY_PATH RES /public/partys.xml 2006-06-19T17:12:00.414000 2006-06-19T17:12:00.414000 partys.xml en-US WINDOWS-1252 text/xml 1
  接下來,使用 fn:doc 顯示單個 partys.xml 文檔。 SELECT XMLQuery('for $p in fn:doc("/public/partys.xml") return $p' RETURNING CONTENT) partys FROM DUAL; PARTYS -------------------------------------------------- -------------------
  對 Fn:collection 的使用與 fn:doc 稍有不同,它可返回存儲在信息庫中同一文件夾中的所有文檔。從該語句生成的輸出不適合打印,手動進行以下格式化以使該文檔可讀性更高。 SELECT XMLQuery('for $p in fn:collection("/public") return $p' RETURNING CONTENT) collection_public FROM DUAL; COLLECTION_PUBLIC -------------------------------------------------- --------------------
  還有其他大量 DBMS_XDB 過程和函數可用於管理所有 XML DB 資源,例如,提供刪除資源和創建文件夾的功能。這些函數可在 OTN 上的 Oracle XML DB 開發人員指南 10 g 第 2 版 中找到。 Oracle 數據庫 10g 第 2 版中引入了 XMLQuery() 和 XMLTable() 函數。它們在 SQL 和 XML 之間提供了強大的接口,允許我們查詢、構造和轉換關係數據,就像它是 XML,反之也可以將 XML 數據當作關係數據來處理。通常,我們使用 XMLQuery() 從關係數據生成 XML 文檔,並使用 XMLTable() 從 XML 數據創建關係視圖。它們仍然不是 ANSI SQL 的一部分,但預計會包括在將來的標準中。 XMLQuery() 函數。 該函數用於構造 XML 數據並使用 XQuery 來查詢該數據。它支持在 SQL 上下文中執行 XQuery 表達式。我們也可以通過使用 ora:view 爲關係數據創建動態 XML 視圖來查詢關係數據,並能夠操作部分 XML 文檔而非整個文檔。
  XMLQuery() 將 XQuery 表達式作爲字符串文字,將可選的 XQuery"上下文項"作爲 SQL 表達式。該表達式設置將在其中評估 XQuery 表達式的 XPath 上下文。該函數將 XQuery 表達式結果作爲 XMLType 實例返回。XMLQuery() 函數也可以將 SQL 表達式作爲參數,其中當評估表達式時,值綁定到 XQuery 變量。這些結果作爲 XMLType 實例返回。
  來看兩個示例,其中我們針對關係數據和 XML 數據使用了 XMLQuery()。
  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章