proc学习笔记

来源:互联网 发布:淘宝店铺买模版视频 编辑:程序博客网 时间:2024/06/10 09:58

1、proc是什么?
    proc是oracle用来预编译嵌入SQL语句的c程序。
下图展示了Proc*C/C++程序的编写、编译流程。

根据上图可以看出proc只是预编译一下源程序,即把*.pc预编译成标准的c或c++程序。

2、怎样编译、链接*.pc应用程序?
    本文以linux环境为例,首先要保证C/C++的编译器(gcc/g++)可以使用。然
后就是要正确安装oracle数据库服务器和proc development tools组件,一般会默认安
装。此时应当保证proc命令可以使用。
    如果不能使用则检查以下环境变量(.bash_profile)是否配置正确:
ORACLE_HOME=/home/oracle    #oracle软件安装路径
ORACLE_SID=zcm            #oracle数据库实例名
PATH=${ORACLE_HOME}/bin:${PATH}:.    #可执行程序搜索路径
LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${LD_LINRARY_PATH}:.    #链接库文件搜索路径
export ORACLE_HOME ORACLE_SID PATH LD_LIBRARY_PATH

举例如下分三步走:
第一步:编写一个简单的proc程序(命名为login.pc):
#include <stdio.h>
#include "sqlca.h"

EXEC SQL BEGIN DECLARE SECTION;
        char user[] = "scott";
        char pass[] = "scott";
EXEC SQL END DECLARE SECTION;

int main(int argc, char **argv)
{
        EXEC SQL CONNECT :user IDENTIFIED BY :pass;
        if(sqlca.sqlcode == 0)
                printf("success!!\n");
        else
                printf("error!\n");
        return 0;
}

第二步:在命令行输入proc预编译pc文件为c文件
$ proc iname=login.pc oname=login.c
注意此时可能会报错:
Error at line 34, column 11 in file /usr/include/stdio.h
# include <stddef.h>
..........1
PCC-S-02015, unable to open include file
意思就是找不到stddef.h这个文件
解决办法:
【1】找到该文件以及其他需要文件的绝对路径:
$ find /usr -name stddef.h
【2】将该绝对路径写入${ORACLE_HOME}/precomp/admin/pcscfg.cfg
include=/usr/lib/gcc/i686-redhat-linux/4.4.4/include

第三步:用gcc编译、链接c源文件
$ gcc -I ${ORACLE_HOME}/precomp/public login.c -o login -L ${ORACLE_HOME}/lib -l clntsh
上面:
'-I'指定头文件路径
'-o'指定输出文件名
'-L'指定库路径
'-l'指定链接动态库名字

最后就可以执行login程序了


原创粉丝点击