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限定所有宿主变量必须定义在声明段中,只有在声明段中的预编译指令才会识别。
注意:需要把ORACLE的环境变量引入.bash_profile中
3.示例程序
3.1 编辑login.pc文件
- <span style="font-size: 18px;">#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);
- }</span>
#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,执行该文件就可以登录到数据库的指定用户。