Posted on 2008-08-19 18:39
Prayer 阅读(864)
评论(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编译指令调用的是那个编译器(可能是一个变量)。