1、环境的搭建
安装好ORACLE后,在用户.profile文件中添加
LD_LIBRARY_PATH=/usr/lib:$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib:$ORACLE_HOME/rdbms/lib
然后
export LD_LIBRARY_PATH
2、在命令行执行proc正确后,在文件/oracle_install/product/10.2.0.1/precomp/admin/pcscfg.cfg中添加如下内容:
sys_include=(/ade/aime_rdbms_9819/oracle/precomp/public,/usr/include,/usr/lib/gcc-lib/i486-suse-linux/2.95.3/include,/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/include,/usr/lib/gcc-lib/i386-redhat-linux7/2.96/include)
ltype=short
code=cpp
cpp_suffix=cc
parse=none
SQLCHECK=SEMANTICS
注:关于code=cpp,这里有三种模式,code=cpp、code=kr_c、code=ansi_c。采用何种方式决定了与编译proc编译后的文件后缀名和函数原型的方式。
2.1 code=cpp
此时,与编译将采用C++的原型编译方式,编译后的文件以.cc结尾。
2.2 code=kr_c和code=ansi_c
此时编译器都将按照C语言的原型方式编译,编译后文件以.c结尾。两者的区别是:
当采用code=kr_c的方式编译时,原型编译为如下形式:
extern void sqlora(/*_long *, void * _**/) ;
当采用code=ansi_c的方式编译时,原型编译形式如下:
extern void sqlora(long *, void *) ;
3、编写源程序first.pc。
#include <stdio.h>
EXEC SQL include sqlca.h ;
EXEC SQL BEGIN DECLARE SECTION ;
char *uid = "uid/uid@uid" ;
EXEC SQL END DECLARE SECTION ;
int main()
{
EXEC SQL CONNECT :uid ;
if (sqlca.sqlcode == 0) {
printf("Conn OK;/n") ;
} else {
printf("Conn ERROR;/n") ;
}
return 0 ;
}
4、编写Makefile文件。
CC=g++
first:
proc first.pc
${CC} -o first -I$(ORACLE_HOME)/precomp/public/ -L$(ORACLE_HOME)/lib/ -lclntsh first.cc
rm -rf t* first.lis first.cc
clean:
rm -rf t* first.lis first.cc
rm -rf first
值得说明的是,如果我们采用code=cpp的方式编译,CC必须使用g++编译器,否则报错;如果采用code=ansi_c/code=kr_c的方式编译,则可使用C语言的编译器,如cc、gcc等。上述给出的是采用code=cpp的方式编译的,下面给出code=ansi_c/code=kr_c的makefile文件。
CC=cc
first:
proc first.pc
${CC} -o first -I$(ORACLE_HOME)/precomp/public/ -L$(ORACLE_HOME)/lib/ -lclntsh first.c
rm -rf t* first.lis first.c
clean:
rm -rf t* first.lis first.c
rm -rf first
注意此时的first.cc都变成了first.c文件。
5、执行make命令,则输出如下结果:
proc first.pc
Pro*C/C++: Release 10.2.0.1.0 - Production on Thu Jan 15 15:23:19 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
System default option values taken from: /oracle_install/product/10.2.0.1/precomp/admin/pcscfg.cfg
g++ -o first -I/oracle_install/product/10.2.0.1/precomp/public/ -L/oracle_install/product/10.2.0.1/lib/ -lclntsh first.cc
rm -rf t* first.lis first.cc
表明执行成功,通过ls命令可以看到first执行程序已经成功被编译出来。
$ ls
first first.pc makefile
$
6、运行first。
$ ./first
sqlca.sqlerrm.sqlerrmc:[];
Conn OK;
$
至此,第一个proc程序结束。