先決條件
要在一台機器上構建 SQL 過程,需要安裝兩個產品:
Application Development ClIEnt(ADC),其中包含開發 DB2 應用程序所需的所有庫、頭文件、預編譯器,等等。
一個支持 DB2 的 C 編譯器。
關於平台所提供的支持 DB2 的 C 編譯器的清單,請查閱 Application Building Guide。
設置環境
正如前面提到的,DB2 將 SQL 過程轉換成 C 代碼,此代碼隨後則被編譯成存儲過程庫。為了編譯該代碼,必須配置 DB2 以檢測所安裝的 C 編譯器。
為了配置 DB2 以檢測所安裝的 C 編譯器:
創建用以為編譯器設置環境的可執行文件。該文件將是 Windows 上的批(.bat)文件、OS/2 上的命令(.cmd)文件或 UNIX 上的 shell 腳本。設置編譯器環境將包括更新 PATH、INCLUDE 和 LIB 環境變量。
通過發出下列命令,更新 DB2 注冊表變量 DB2_SQLROUTINE_COMPILER_PATH 以指向第 1 步所創建的可執行文件:db2set DB2_SQLROUTINE_COMPILER_PATH=full_path_to_executable_file
注意:在 Windows NT® 和 Windows 2000 上,只要已將編譯器的環境變量存作 SYSTEM 變量,就無需設置以上注冊表變量。
DB2 還提供了每個平台上默認的可執行文件,用以為該平台所支持的其中一個(默認的)編譯器設置環境。其默認的文件名和位置取決於平台:
在 Windows 上:%DB2PATH%sqllibfunction outinesr_cpath.bat
在 OS/2 上:%DB2PATH%sqllibfunction outinesr_cpath.cmd
在 UNIX 上:$HOME/sqllib/function/routine/sr_cpath
默認情況下,DB2 會將 DB2_SQLROUTINE_COMPILER_PATH 設置為上面的其中一個文件,除非已將其注冊表變量修改為指向一個不同的文件。因此,如果安裝了默認的 C 編譯器並且打算將之用於開發,就無需創建一個單獨的可執行文件來設置編譯器環境。
應檢查上述文件的內容以確保它們正確反映了焦點平台中默認編譯器的環境設置。例如,在 Windows NT 和 Windows 2000 上,sr_cpath.bat 文件假定 Microsoft Visual C++® Version 6 安裝在 C:Program FilesMicrosoft Visual Studio 之下。如果它安裝在 D:Microsoft Visual Studio 之下,那麼該文件的內容就需要進行修改。
另一個常見的錯誤就是對該文件進行了所有的正確修改,但卻保留了編譯器環境設置命令周圍的注釋。再次檢查 sr_cpath.bat 文件的內容,您將注意到該文件中所有行都以 REM 關鍵字開頭。REM 關鍵字用於注釋行的開始,所以應將之刪除以便設置編譯器環境。
編譯轉換過來的 C 代碼
在配置完 DB2 以檢測編譯器環境之後,就需要配置它,以使用針對所安裝的編譯器的編譯命令。這將通過將另一個 DB2 注冊表變量 DB2_SQLROUTINE_COMPILE_COMMAND 設置為所安裝編譯器的編譯命令來完成。DB2_SQLROUTINE_COMPILE_COMMAND 將被設置為該平台上默認編譯器的一個默認的編譯命令。以下是 AIX®、Solaris® 和 Windows 平台上默認編譯命令的示例:
在 AIX 上,用於 AIX Version 3.6.6 的 IBM C Set++ 的默認編譯命令為:
xlC_r -+ -H512 -T512 -I$HOME/sqllib/include SQLROUTINE_FILENAME.c
-bE:SQLROUTINE_FILENAME.exp -e SQLROUTINE_ENTRY
-o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -lc -ldb2
在 Solaris 上,SPARC Compiler C++ Version 4.2 和 5.0 的默認編譯命令為:
cc -# -Kpic -I$HOME/sqllib/include SQLROUTINE_FILENAME.c -G
-o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -R$HOME/sqllib/lib -ldb2
在 Windows 上,Microsoft Visual C++ Version 5.0 和 6.0 的默認編譯命令為:
cl -Od -W2 /TC -D_X86_=1 -I%DB2PATH%include SQLROUTINE_FILENAME.c
/link -dll -def:SQLROUTINE_FILENAME.def /out:SQLROUTINE_FILENAME.dll
%DB2PATH%libdb2api.lib
注意:以上 AIX 和 Solaris 平台上的‘’用於指示回車。對於 Windows 平台,其整個命令就是連續的一行,不用‘’來指示回車符。
定制編譯命令
如果安裝不同的編譯器(因而需要不同的編譯命令),或者如果定制默認的編譯選項,那麼您就需要將 DB2_SQLROUTINE_COMPILE_COMMAND 設置為定制的編譯命令。下列示例展示了如何指定以上所示每個默認編譯命令的調試選項(用以返回調試信息):
要在 AIX 平台上返回調試信息,就要在默認的編譯命令中添加 -g 選項並且更新 DB2_SQLROUTINE_COMPILE_COMMAND,如下所示:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=攛lC_r -+ -H512 -T512 -g
-I$HOME/sqllib/include SQLROUTINE_FILENAME.c
-bE:SQLROUTINE_FILENAME.exp -e SQLROUTINE_ENTRY
-o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -lc -ldb2
要在 Solaris 平台上返回調試信息,就要在默認的編譯命令中添加 -g 選項並且更新 DB2_SQLROUTINE_COMPILE_COMMAND,如下所示:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=攃c -# -Kpic -g
-I$HOME/sqllib/include SQLROUTINE_FILENAME.c -G
-o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -R$HOME/sqllib/lib -ldb2
要在 Windows 平台上返回調試信息,就要更新 DB2_SQLROUTINE_COMPILE_COMMAND,如下所示:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cl -Od -W2 /TC -D_X86_=1
-I%DB2PATH%include SQLROUTINE_FILENAME.c /link -dll
-def:SQLROUTINE_FILENAME.def /out:SQLROUTINE_FILENAME.dll
-debug:full -pdb:none -debugtype:cv %DB2PATH%libdb2api.lib
再次請注意在 Windows 平台上,編譯命令應按一行連續輸入。
恢復為默認的編譯命令
將 DB2_SQLROUTINE_COMPILE_COMMAND 設置為空將會恢復默認的編譯命令和選項。其設置如下所示:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=
結束語
構建 SQL 過程有兩個主要步驟:
安裝編譯器並配置 DB2 以檢測編譯器環境。這是通過創建用以設置編譯器環境(PATH、LIB 和 INCLUDE 環境變量)的可執行文件,以及將 DB2_SQLROUTINE_COMPILER_PATH 設置為該文件來完成的。可使用默認的可執行文件(sr_cpath/sr_cpath.bat/sr_cpath.cmd)或創建新文件來為不同的編譯器設置編譯器環境。
將 DB2_SQLROUTINE_COMPILE_COMMAND 設置為一個編譯命令。可使用默認的編譯命令或者將 DB2_SQLROUTINE_COMPILE_COMMAND 設置為一個定制的編譯命令(例如添加調試選項、64 位選項,等等)。
構建 SQL 過程中常見的錯誤源於編譯器環境的錯誤配置。本文簡明地解釋了為構建 SQL 過程設置環境的過程。DB2 Version 7,fixpak 3 的版本信息提供了其他平台上默認編譯命令的更多示例。