proc C 的完整小例证

proc C 的完整小例子
/**
简单的procC程序 完整的编译执行过程
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define USERNAME "name" /*用户名*/
#define PASSWD "pwd" /*密码*/
#define DBNAME "dbname" /*数据库名*/
EXEC SQL INCLUDE SQLCA;
void sql_error();
void sql_connect();
EXEC ORACLE OPTION (RELEASE_CURSOR = TURE);
EXEC SQL BEGIN DECLARE SECTION;
/*变量声明*/
char *username=USERNAME;
char *password=PASSWD;
char *dbname=DBNAME;
char *orclname;
char ac_ename[10];
char grade[10];
int id;
int score;
EXEC SQL END DECLARE SECTION;
void sql_error(char *msg) /*错误处理函数*/
{
printf("\n%s,%ld,%s\n", msg,sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK RELEASE;
exit(-1);
}
void sql_connect()
{
printf("begin connect\n");
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbname;
}
int main()
{

EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE ERROR: ");
/*接数据库*/
sql_connect();

EXEC SQL DECLARE name_cursor CURSOR FOR
SELECT ID,NAME,SCORE,GRADE FROM TMP_LQ_TEST; /*测试表 包含id  姓名,分数,评分四列*/
if(sqlca.sqlcode!=0){
printf("查询出错1\n");
return -1;
}
EXEC SQL OPEN name_cursor;/*打开 游标*/
if(sqlca.sqlcode!=0){
printf("查询出错2\n");
return -1;
}
printf("     id     name     score    grade     \n");

while(1){
id=0;
score=0;
memset(ac_ename,0x00,sizeof(ac_ename));
memset(grade,0x00,sizeof(grade));
EXEC SQL FETCH name_cursor into :id,:ac_ename,:score,:grade;
printf("%10d %s %5d %s\n",id,ac_ename,score,grade);
if(sqlca.sqlcode<0)
{
printf("操作数据库错误\n");

exit(-1);
}else if(sqlca.sqlcode==1403){
printf("查询无纪录\n");
exit(-1);
}
}
EXEC SQL CLOSE name_cursor;

EXEC SQL COMMIT WORK RELEASE;
return 0;
}

执行过程:
1,源文件名为proc_test.pc  用proc编译  proc proc_test.pc 生成.lis  .c文件
2,连接gcc -o proc_test proc_test.c /u1/oracle/app/oracle/product/11.2.0/client_1/lib32/libclntsh.sl
(后部分是链接所需要的oracle库)