構建例程
為了構建 C 例程(UDF 或 存儲過程),必須首先對其進行預編譯、編譯以及鏈接。該過程可通過批文件 bldrtn (UNIX/LINUX 上)或 bldrtn.bat (Windows 上)自動完成,該文件包含在隨 DB2 一同安裝的樣本中。可以在 UNIX/Linux 上的 /sqllib/samples/c 目錄或 Windows 上的
bldrtn [dbname userid passWord]
如果未提供 dbname,那麼批文件會將之默認為 SAMPLE ,而 userid 和 passWord 則被默認為當前會話的用戶 ID 和口令。
清單 7 演示了使用 bldrtn 批文件在 functions.sqc 文件中進行的例程構建。
清單7. 在 functions 文件上執行 buildrn
bldrtn functions
值得說明的是,可能需要對 Windows 平台上的 bldrtn 批文件進行編輯
以便在鏈接指令中包含 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
在成功構建 C 例程之後,其共享庫會被自動地移到 sqllib/function 目錄中。
注意:
注意:構建步驟中需要導出文件 .def(Windows 上)或 .exp(UNIX 上)。
注冊例程
一旦構建了例程,就要在數據庫中注冊它們。清單 8 展示了為在數據庫中注冊這些例程而創建的腳本的內容。請注意,字符‘@’在此用作語句結束符:
清單8. 用於在數據庫中注冊例程的腳本
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