首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 9i XMLType 數據類型完全指南:存儲、查詢、更新與大文檔處理

     編輯:Oracle 資料庫基礎

XMLType 簡介

Oracle 9i 引入 XMLType 系統定義的對象類型,用於高效存儲、管理、查詢與轉換 XML 數據,內置豐富函數支持節點提取、索引、聚合生成等操作。

核心操作實戰

1. 創建包含 XMLType 列的表

CREATE TABLE abc (
  id NUMBER,
  xmldoc SYS.XMLType
);

2. 插入 XML 數據

INSERT INTO abc (id, xmldoc) VALUES (
  abc_seq.NEXTVAL,
  SYS.XMLType.createXML('abc')
);

3. 查詢與提取 XML 節點

  • 提取屬性值:
    SELECT xmldoc.extract('//name/a[@id=1]/@value').getStringVal() FROM abc;
  • 提取節點文本:
    SELECT xmldoc.extract('//name/a/text()').getStringVal() FROM abc;
  • 提取節點屬性:
    SELECT xmldoc.extract('/root/name/@id').getStringVal() FROM abc;

4. 更新 XML 內容

UPDATE abc SET xmldoc = updateXML(xmldoc, '//name/a[@id=1]/@value', 'new value')
WHERE ...;

注意:若目標節點不存在,更新將無效果。

5. 處理超過 4KB 的大型 XML 文檔

利用臨時 CLOB 列中轉:

  1. 創建臨時表,包含 CLOB 列;
  2. 將大 XML 寫入 CLOB 列;
  3. INSERT INTO abc (id, xmldoc) VALUES (seq.NEXTVAL, SYS.XMLType.createXML((SELECT clob_col FROM temp_table WHERE ...)));

Oracle 9i 內置 XML 功能矩陣

特性說明
XMLType系統預定義類型,支持列創建、PL/SQL 參數傳遞、存儲索引處理
DBMS_XMLGENPL/SQL 包,將 SQL 查詢結果轉為標準 XML,返回 XMLType 或 CLOB,內核級 C 實現,性能優異
SYS_XMLGENSQL 函數,將單值/對象/XMLType 實例轉為 XML 文檔,返回 XMLType
SYS_XMLAGG聚合函數,將多個 XML 片段連接並添加根標籤,生成單一 XML 文檔
UriType 家族存儲/查詢 URL 引用,含 HttpUriType、DBUriType 等子類型

綜合案例:倉庫信息管理

CREATE TABLE warehouses (
  warehouse_id NUMBER(3),
  warehouse_spec SYS.XMLType,
  warehouse_name VARCHAR2(35),
  location_id NUMBER(4)
);

INSERT INTO warehouses VALUES (
  1001,
  SYS.XMLType.createXML('Owned')
);

-- 查詢
SELECT w.warehouse_spec.extract('/Warehouse/Building/text()').getStringVal() "Building"
FROM warehouses w;

-- 更新
UPDATE warehouses SET warehouse_spec = SYS.XMLType.createXML(
  'Leased'
);

-- 刪除
DELETE FROM warehouses e
WHERE e.warehouse_spec.extract('//Building/text()').getStringVal() = 'Leased';

總結

XMLType 讓 Oracle 成為原生 XML 數據庫,結合 DBMS_XMLGEN、SYS_XMLGEN、SYS_XMLAGG 等工具,可實現從關係數據到 XML 的無縫雙向轉換,極大簡化了異構系統集成與數據交換開發。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved