DB2 8.x 以關係基礎設施存儲 XML(CLOB 或分解到關係表)。DB2 9 (Viper) 引入原生 XML 支援:XML 作為獨立資料類型,以解析後的帶註解樹存儲,支援 XML 索引、XQuery、SQL/XML。遷移能釋放原生 XML 的查詢、索引、更新效能優勢。
因 XQuery 更新標準尚未定型,原生 XML 無開箱即用的部分更新功能。本預存程序在資料庫端完成修改,避免客戶端來回傳輸與 DOM 程式設計複雜度。
注意:底層仍執行完整文檔寫入。
DB2XMLFUNCTIONS.XMLUPDATE(commandXML, querySQL, updateSQL, errorCode, errorMsg)
| 參數 | 說明 |
|---|---|
| commandXML | XML 格式更新指令,含 namespace、action(replace/delete/compute/append)、path、col、update value |
| querySQL | 選取待更新 XML 文檔的 SQL(必填,只能選 XML 欄位) |
| updateSQL | 參數化更新 SQL,修改後文檔綁定為 ? 參數(CLP 呼叫必填) |
| errorCode | 輸出:-1 失敗,正值為更新筆數 |
| errorMsg | 輸出:錯誤詳情 |
<updates namespaces="prefix:uri;...">
<update using="sql|..." action="replace|delete|compute|append" col="1" path="XPath">value</update>
</updates>
namespaces:路徑中使用的命名空間前綴映射(含預設命名空間)action=compute:value 為參數化表達式,? 代表原節點值using=sql:value 為 SQL 表達式,執行結果作為新值text() 結尾以處理空元素db2XMLfunctions.jar(或直接下載)DB2_USE_DB2JCCT2_JROUTINE=on 啟用 JCC 驅動CALL SQLJ.INSTALL_JAR('file:/path/db2XMLfunctions.jar', 'db2XMLfunctions', 0)CREATE PROCEDURE db2xmlfunctions.XMLUPDATE(...)(LANGUAGE JAVA, FENCED, PARAMETER STYLE JAVA)CREATE TABLE XMLCustomer(cid INT PRIMARY KEY, info XML)action="replace" + 完整元素內容using="sql" + 子查詢action="compute" + (20+?)*32-?updates 含多個 updateupdateSQL 中使用 XMLVALIDATE(? ACCORDING TO XMLSCHEMA ID ...)XMLPARSE)XMLUPDATE 或 V9 新增的 XMLMODIFY(後續版本)遷移至 DB2 Viper 原生 XML 是架構升級的關鍵步驟。XMLUPDATE 預存程序填補了 V9 初期部分更新的空白,配合遷移工具與分步驗證,可平滑過渡並釋放 XML 處理新能力。