1.使proc预编译命令可用
在/etc/profile后面添加如下内容:
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib/usr/local/lib
export LD_LIBRARY_PATH
2.配置pcscfg.cfg文件
pcscfg.cfg位于$ORACLE_HOME/precomp/admin/目录下,在pcscfg.cfg后面添加
SQLCHECK=SEMANTICS
parse=none
parse=none限定所有宿主变量必须定义在声明段中,只有在声明段中的预编译指令才会识别。
3.示例程序
3.1 编辑login.pc文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
EXEC SQL INCLUDE sqlca;
EXEC SQL BEGIN DECLARE SECTION;
varchar username[20];
varchar password[20];
EXEC SQL END DECLARE SECTION;
int
main(void)
{
strcpy(username.arr, "hr");
username.len = strlen("hr");
strcpy(password.arr, "hr");
password.len = strlen("hr");
EXEC SQL CONNECT :username IDENTIFIED BY :password;
if(sqlca.sqlcode == 0){
printf("login success\n");
}else{
printf("login failed\n");
}
exit(0);
}
3.2 编译pc文件
执行proc login.pc,在当前目录下生成login.lis和login.c。
3.3 编译.c文件
gcc -o login login.c
这里会报错:
/tmp/ccalQSQM.o: In function `main':
login.c:(.text+0x20f): undefined reference to `sqlcxt' collect2: ld 返回 1
这里报错是因为编译的时候要用到oracle的库,该库不在默认路径,需要手动指定,如下编译即可:
gcc -o login login.c -L /home/oracle/oracle11g/lib/ -l clntsh
编译成功后目录下生成可执行文件login,执行该文件就可以登录到数据库的指定用户。