Posted on 2008-08-19 18:39
Prayer 閱讀(874)
評論(0) 編輯 收藏 引用 所屬分類:
DB2
db2構建存儲過程過程:先用自己的翻譯命令把.spp 文件翻譯生成.sqc文件,然后用預編譯命令編譯生成.c文件,然后用綁定命令生成綁定.bnd文件,然后從DB2_SQLROUTINE_COMPILER_PATH參數指定的文件中所描述的路徑中去尋找c的編譯器(window 下是vcvars32.bat,unix 下是sr_cpath文件),如果DB2_SQLROUTINE_COMPILER_PATH指定什么文件,則用默認的文件,win下是sr_cpath.mak(實例名SQLLIBfunctionroutine),unix下是sr_path(實例名/sqllib/function/routine/),
編譯成功后生成.dll,并幫定到數據庫上,就成功了。
spp-->.sqc->.c和.bnd->.dll(window下)
.spp用的是純sql,開發速度快易閱讀,但是翻譯成的.sqc文件很累贅,沒有自己寫的.sqc精練,執行效率也相應較低,java的IDE環境容易死掉。
下面是我們的實例:
AIX上db2沒有設置DB2_SQLROUTINE_COMPILER_PATH這個參數,
也就是說AIX上db2編譯存儲的時候用的參數是值,就是
實例名/sqllib/function/routine/sr_cpath 這個文件
sr_cpath的內容如下:
bin/sh
PATH=$PATH:/usr/vacpp/bin
PATH=$PATH:/usr/ibmcxx/bin
PATH=$PATH:/usr/lpp/xlC/bin
export PATH
就是設置AIX上的編譯路徑,sr_cpath的功能就像是我們win上vcvars32.bat。
你可以在window的機器上的:”實例名SQLLIBfunctionroutinesqlproc數據庫名模式名“下找到編譯好的*.dll文件還有一些中間文件.sqc和c。
再看一下.log文件,里面就有整個編譯的過程,就知道在window下db2編譯存儲過程的整個步驟了。
這個.log文件也可以在AIX上相應的位置找到,通過這個文件就可以知道在AIX上用的是什么編譯指令來編譯你的存儲過程了。
也可以看到B2_SQLROUTINE_COMPILER_PATH這個參數的內容。
所以我估計在AIX上可以成功編譯,就是就是裝了一些c的編譯軟件,所以編譯的時候db2用sr_cpath的內容搜索c編譯器的位置就可以找到了。
在hp上也有這個文件其內容是
#!/bin/sh
PATH=/opt/aCC/bin:$PATH
# PATH=$PATH:/opt/ansic/bin
export PATH
在.log文件找到了編譯的指令:
aCC +DAportable +a1 +z -ext -I/db2inst/db2inst1/sqllib/include P0538300.c -b -o P0538300 -L/db2inst/db2inst1/sqllib/lib -ldb2
db2就會在sr_cpath所指定的路進去找aCC這編譯的文件,aCC是hp自己的c++編譯器。但是在這邊hp機器上沒有找到sr_cprog指定的c++編譯器aCC。不過在hp上還有一個c的編譯文件ld ,我編的一個hello程序就是用他編譯通過的。
注:我編譯的時候還是用cc命令編譯的,shell會根據當前系統的編譯器安裝情況來決定cc編譯指令調用的是那個編譯器(可能是一個變量)。