XMLType 概述
Oracle 9i+ 引入 XMLType 原生型別,支援 XML 文件儲存、查詢、索引與轉換。提供豐富方法:extract()、existsNode()、transform()、getStringVal() 等。
建立 XMLType 欄位表
CREATE TABLE abc (
id NUMBER PRIMARY KEY,
xmldoc SYS.XMLTYPE
);
宣告型別使用 SYS.XMLTYPE。
插入 XML 資料
INSERT INTO abc (id, xmldoc) VALUES (
abc_seq.NEXTVAL,
SYS.XMLTYPE.CREATEXML('abc')
);
- 使用
SYS.XMLTYPE.CREATEXML() 將字串轉換為 XMLType
- 自動驗證 XML 格式正確性
查詢與擷取 XML 內容
| 需求 | XPath 表達式 | SQL 範例 |
| 屬性值 | //name/a[@id=1]/@value | SELECT xmldoc.extract('//name/a[@id=1]/@value').getStringVal() FROM abc |
| 節點文字 | //name/a/text() | SELECT xmldoc.extract('//name/a/text()').getStringVal() FROM abc |
| 節點屬性 | /root/name/@id | SELECT data_t.extract('/root/name/@id').getStringVal() FROM sehr_house_data |
更新 XML 內容
UPDATE abc SET xmldoc =
UPDATEXML(xmldoc, '//name/a[@id=1]/@value', 'some new value')
WHERE ...;
UPDATEXML 依 XPath 定位並替換值
- 注意:目標節點必須存在,否則更新無效果(不會自動建立節點)
載入超過 4KB 的大型 XML 文件
SQL 字面值 4000 位元組限制,採用暫存表中轉:
- 建立暫存表含 CLOB 欄位:
CREATE TABLE tmp_xml (id NUMBER, content CLOB);
- 寫入 XML 至 CLOB 欄位(程式端參數綁定或
DBMS_LOB)
- 轉換插入目標表:
INSERT INTO abc (id, xmldoc) VALUES (
abc_seq.NEXTVAL,
SYS.XMLTYPE.CREATEXML((SELECT content FROM tmp_xml WHERE id = ...))
);
進階功能預覽
- XMLIndex:11g+ 專用 XML 索引,大幅加速 XPath 查詢
- XMLSchema 驗證:註冊 XSD,強制 XML 符合結構定義
- XQuery / SQL/XML:標準化查詢語法,跨關聯與 XML 資料
- 二元性支援:PL/SQL 嵌入 XML、XML 嵌入 PL/SQL 互相轉換
- 上一篇文章: Oracle CLOB 處理實戰:直接拼接 vs 參數綁定、4000 位元組限制與最佳實踐
- 下一篇文章: Oracle LogMiner 工具實戰:資料字典建立、Redo Log 分析與 16 進制還原
Copyright ©
程式碼之家 All Rights Reserved