oracle 11g pro c c 编程艺术

本文介绍了如何使用PROC进行Oracle数据库的C/C++编程,包括环境设置、服务开启、PROC编程示例、错误处理和NULL值处理等关键点。示例代码展示了数据库连接、插入数据、游标操作以及存储过程的调用。
摘要由CSDN通过智能技术生成

转载:http://blog.sina.com.cn/s/blog_6cc7e1e10100ylo3.html

 

PROC是ORACLE数据库提供的编程接口之一,其应用十分的广泛,本文通过一个具体的例子,介绍PROC编程的一些经验及应注意的地方。


// oracle数据库环境设置

[root@localhost test]# export ORACLE_BASE=/u01/app/oracle
[root@localhost test]# export ORACLE_HOME=/u01/app/oracle/oracle/product/10.2.0/db_1
[root@localhost test]# export ORACLE_SID=testDB
[root@localhost test]# export PATH=$PATH:/u01/app/oracle/oracle/product/10.2.0/db_1/bin
[root@localhost test]# export LD_LIBRARY_PATH=/u01/app/oracle/oracle/product/10.2.0/db_1/lib

 

// oracle服务开启

$ lsnrctl start          #启动监听器, 监听器接受客户端的连接请求
$ emctl start dbconsole  #启动 Oracle Enterprise Manager 数据库控制
$ isqlplusctl start     #启动和停止 iSQL*Plus

 

 

// 文件名: main.pc
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlda.h>
#include <sqlcpr.h>


EXEC SQL INCLUDE sqlca;
//RELEASE_CURSOR=YES 使PROC 在执行完后释放与嵌入SQL有关资源
EXEC ORACLE OPTION (RELEASE_CURSOR = YES);

// 申明宿主变量
EXEC SQL BEGIN DECLARE SECTION;
varchar vc_user[30];
long userid=0;
char username[51]="";

EXEC SQL VAR username IS STRING(51);
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);
}


int main(int argc,char* argv[])
{
 EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE ERROR: ");

 

// 连接数据库
 const char* conn = "user/pass@testDB";
 strcpy(vc_user.arr,conn);
 vc_user.len=strlen(conn);
 exec sql connect :vc_user;

 

 // 测试插入语句
 EXEC SQL INSERT INTO TESTDEMO(ID,NAME) VALUES(3,'haoj');

 

 // 利用游标循环取值
 EXEC SQL DECLARE cur_user CURSOR FOR SELECT ID, NAME FROM TESTDEMO;
 EXEC SQL OPEN cur_user;

 while(1){
  userid=0;
  strcpy(username,"");
  EXEC SQL FETCH cur_user INTO  :userid, :username;
  if( sqlca.sqlcode == 1403) break;

  printf("userid=%ld,username=%s\n",userid,username);
 }

 EXEC SQL CLOSE cur_user;
 // EXEC SQL COMMIT WORK RELEASE;
 EXEC SQL ROLLBACK WORK RELEASE;

 return 0;
 }

 

 

// 文件名: Makefile
OBJS=main.o

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值