我写的简单的pro*c的例子

来源:互联网 发布:c语言void main 编辑:程序博客网 时间:2024/05/28 15:41

proc 例子
write by okcai
2004-6-18 13:53

环境: 
       硬件:HP 9000
       软件:HP-UX  B.11.11

1 修改PROC默认配置文件
INCLUDE:包括文件的目录路径,一般在CONFIG文件中配置,pcscfg.cfg中有默认定义。
SYS_INCLUDE:系统头文件所在目录,一般在CONFIG文件中配置,pcscfg.cfg中有默认定义。但要注意可能默认的系统头文件的路径不对。如
sys_include=($ORACLE_HOME/precomp/public,/usr/include,/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include)
USERID:用户名/口令 [@dbname] 连接串

pcscfg.cfg文件如下
sys_include=(/usr/include)
ltype=short
define=ORASTDARG


$ORACLE_HOME/precomp/admin/pcscfg.cfg

1.写个例子代码cai.pc,功能是查询手机号码13905718888的名称

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlda.h>
#include <sqlcpr.h>

EXEC SQL INCLUDE sqlca;
EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
EXEC SQL BEGIN DECLARE SECTION;
 char vName[30];
 char vPass[30];
 char vSvr[30];
 char vCustName[60];
EXEC SQL END DECLARE SECTION;

#ifdef __cplusplus
extern "C"
#endif
void
#if defined(__STDC__) || defined(__cplusplus)
sql_error(char *msg)
#else
sql_error(msg)
char *msg;
#endif
{
 printf("/n%s,%ld,%s/n",msg,sqlca.sqlcode,(char*)sqlca.sqlerrm.sqlerrmc);
 EXEC SQL ROLLBACK RELEASE;
 exit(-1); 
}

#ifdef __cplusplus
extern "C"
#endif
int
main()
{
 EXEC SQL WHENEVER SQLERROR DO sql_error("oracle error:   ");

 strcpy(vName,"aicbs");
 strcpy(vPass,"aicbs");
 strcpy(vSvr,"busi_cs");
 printf("Start connect to database %s/%s@%s/n",vName,vPass,vSvr);
 EXEC SQL CONNECT :vName IDENTIFIED BY :vPass USING :vSvr;
 EXEC SQL SELECT CUST_NAME INTO :vCustName   FROM CM_CUSTOMER WHERE CUST_ID = (SELECT  /
   CUST_ID FROM CM_USER WHERE BILL_ID = '13905718888');
 printf("The Result of select,cust_name = %s/n",vCustName);
 return 0;
}


2.预编译

proc cai.pc

3.编译,链接(编译环境是HP unix,其他操作系统 -l连接动态库方式需要修改)
cc cai.c -I $ORACLE_HOME/precomp/public -L $ORACLE_HOME/precomp/lib32 -L $ORACLE_HOME/lib32 -lclntsh

4.如果写为Makefile
cai:cai.pc
    proc cai.pc
    cc cai.c -I $(ORACLE_HOME)/precomp/public -L $(ORACLE_HOME)/precomp/lib32 -L $(ORACLE_HOME)/lib32 -lclntsh -o cai

原创粉丝点击