隨著企業應用逐漸轉向服務導向架構(SOA),XML 成為資料交換的標準格式。Oracle Database 提供了強大的原生 XML 支援,包括 XMLType 資料型別、SQL/XML 函數、XQuery 語言以及 XML DB 儲存庫。本文將系統介紹在 Oracle 中高效存取、查詢與轉換 XML 資料的核心技術。
XMLType 是 Oracle 專為 XML 設計的物件型別,支援三種儲存方式:
使用 XMLSerialize、XMLElement、XMLAgg 等 SQL/XML 函數:
SELECT XMLSerialize(DOCUMENT
XMLElement("ROWSET",
XMLAgg(XMLElement("ROW",
XMLForest(aaa AS "AAA", bbb AS "BBB")
))
) AS CLOB) AS xml_result
FROM table_aaa;
使用 DBMS_XMLSTORE 套件時,必須正確設定 rowTag,否則會導致「找不到對應標籤」錯誤:
v_ctx := DBMS_XMLSTORE.newContext('TABLE_AAA');
DBMS_XMLSTORE.setRowTag(v_ctx, 'ROW'); -- 對應 XML 中的 標籤
DBMS_XMLSTORE.insertXML(v_ctx, xml_doc);
DBMS_XMLSTORE.closeContext(v_ctx);
常見錯誤:XML 標籤大小寫敏感,<ROW> 與 <row> 視為不同標籤。
XMLTRANSFORM(xml, xsl) 可將 XML 轉為 HTML、CSV 或其他 XML 結構。DBMS_XMLSTORE 或 SQL*Loader 直載 Binary XML。EXTRACTVALUE,會導致全表掃描與解析開銷。Oracle XML DB 將關聯與 XML 世界無縫整合。選擇 Binary XML 儲存、善用 SQL/XML 標準函數、建立適當 XMLIndex,即可在保有 XML 彈性的同時,獲得關聯資料庫級別的查詢效能與資料完整性保障。