本文詳細說明DB2 C語言例程(UDF與存儲過程)從源碼到生產環境的標準化構建與部署流程,涵蓋編譯鏈接、共享庫部署、數據庫註冊三大階段。
DB2安裝目錄下提供樣本構建腳本:
/sqllib/samples/c/bldrtn\sqllib\samples\c\bldrtn.bat用法:
bldrtn [dbname userid password] # 缺省連接SAMPLE庫,當前用戶認證
# 示例
bldrtn functions
Windows平台關鍵修改: 編輯 bldrtn.bat 鏈接步驟,添加 ws2_32.lib:
:link_step
rem Link the program.
link -debug -out:%1.dll -dll %1.obj db2api.lib ws2_32.lib -def:%1.def
構建成功後,共享庫自動拷貝至 sqllib/function 目錄。注意:需提供導出文件(Windows .def / UNIX .exp)。
使用 @ 作為語句終結符,批量註冊三個核心例程:
DROP SPECIFIC PROCEDURE truncate_table@
CREATE PROCEDURE truncate(IN schemaName VARCHAR(130), IN tableName VARCHAR(130))
SPECIFIC truncate_table
DYNAMIC RESULT SETS 0
MODIFIES SQL DATA
NOT DETERMINISTIC
CALLED ON NULL INPUT
LANGUAGE C
EXTERNAL NAME 'functions!truncate_table'
FENCED THREADSAFE
INHERIT SPECIAL REGISTERS
PARAMETER STYLE SQL
PROGRAM TYPE SUB
NO DBINFO@
DROP SPECIFIC FUNCTION client_host_name@
CREATE FUNCTION host_name()
RETURNS VARCHAR(128)
SPECIFIC client_host_name
EXTERNAL NAME 'functions!host_name'
LANGUAGE C
PARAMETER STYLE SQL
DETERMINISTIC
FENCED
NOT THREADSAFE
RETURNS NULL ON NULL INPUT
NO SQL
NO EXTERNAL ACTION
NO SCRATCHPAD
NO FINAL CALL
ALLOW PARALLEL
DBINFO@
DROP FUNCTION call_procedure@
CREATE FUNCTION call_procedure(
procedure VARCHAR(257), parameters VARCHAR(30000),
databaseName VARCHAR(8), userName VARCHAR(128), password VARCHAR(200)
)
RETURNS INTEGER
SPECIFIC call_stp
EXTERNAL NAME 'functions!call_procedure'
LANGUAGE C
PARAMETER STYLE SQL
NOT DETERMINISTIC
NOT FENCED
THREADSAFE
CALLED ON NULL INPUT
NO SQL
EXTERNAL ACTION
NO SCRATCHPAD
NO FINAL CALL
DISALLOW PARALLEL
NO DBINFO@
db2 connect to SAMPLE
db2 -td@ -vf functions.db2
-td@:指定終結符為 @-v:顯示執行過程-f:指定腳本文件通過標準化的 bldrtn 構建與統一註冊腳本,可實現C例程的可重複、可版本化部署。本系列展示的存儲過程、UDF與DB2 API結合,證明了DB2在異構遷移中具備強大的功能映射能力,可構建創造性、可落地的兼容性解決方案。