本文延續遷移系列,呈現 HOST_NAME() UDF在本地與遠程連接下的測試結果,並攻克DB2遷移中的另一難點:在觸發器或UDF中調用存儲過程。
/etc/hosts 映射 127.0.0.1 -> demoaix。執行 VALUES host_name() 返回 demoaix,符合預期。
客戶端主機名 mycomputer。通過別名 samplaix 連接後執行 VALUES host_name() 返回 mycomputer,成功識別遠程客戶端主機名。
DB2當前版本不支持在觸發器或函數中直接 CALL 存儲過程。解決方案:創建一個「橋接」UDF CALL_PROCEDURE,內部建立新連接並執行 CALL 語句。
>--CALL_PROCEDURE--(--procedure_name--,--parameter_list--,--database_name--,--user_name--,--password--)-------------><
procedure_name (VARCHAR(257)):全限定存儲過程名,多參數用逗號分隔,語法需符合 CALL 要求。parameter_list (VARCHAR(30000)):參數列表字符串。database_name (VARCHAR(8)):目標數據庫別名(可跨庫)。user_name / password:執行身份憑證。0:CALL、CONNECT、CONNECT RESET 全部成功。下文將展示兩個完整測試案例:
ins 觸發後調用 CALL_PROCEDURE 執行帶參存儲過程 abc,驗證數據插入。udf_withcall 內部調用雙參數存儲過程,驗證表 c 數據更新。這些模式可直接應用於Oracle/Sybase遷移項目中,解決觸發器調用存儲過程的兼容性缺口。