0

0

Oracle 中oci 关于null 的处理方法

php中文网

php中文网

发布时间:2016-06-07 16:59:22

|

1486人浏览过

|

来源于php中文网

原创

参数indp是指示符缓冲区,也是一个数组,每个元素是一个sb2类型的值。一般作输入用,如果此项动态参数会被输出,则也作输出用。在

oci中处理null,必须通过 Indicator 来完成。

使用的Oracle 版本 Oracle Database 11g Enterprise Edition Release 11.1.0.6.0

#include
#include
#include
#include "include\oci.h"
#include "include\ociextp.h"

 

#define ERRGOTO(Recode) do    \
{          \
 if (Recode!=0)      \
 {         \
 goto ERR;          \
 }         \
} while (0)

 

void main()
{

int a = 0 ;
 OCIDefine* defhp1 = 0;
 OCIDefine* defhp2 = 0;
 int blength = 40;
 char b[40];
 sb2 indicator;

 text *select_sql = (text *)"select a,b from teststmt2";

 dvoid     *tmp;
 OCIEnv *envhp;
 OCIServer *srvhp;
 OCIError *errhp;
 OCISvcCtx *svchp;
 OCISession *usrhp;
 OCIStmt *stmthp;


 char serName1[30] ="10.0.4.161:1521/orcl";
 char userName1[30] = "cxy";
 char pwd1[30] = "cxy";

 //!如果没有数据可以使用这个测试用例创建数据表。
 //test_BindArrayOfStruct();

 memset(b, 0, blength);

 //!初始化换环境句柄
 ERRGOTO(OCIEnvCreate(&(envhp), OCI_DEFAULT,
  NULL, NULL, NULL, NULL, 0, NULL));

 //!初始化错误句柄
 ERRGOTO(OCIHandleAlloc((dvoid *)envhp,(dvoid **)&errhp,OCI_HTYPE_ERROR,64,(dvoid **) &tmp));

 //!分配服务上下文句柄和服务句柄
 ERRGOTO(OCIHandleAlloc((dvoid *)envhp,(dvoid **)&srvhp,OCI_HTYPE_SERVER, 64,(dvoid **) &tmp));
 ERRGOTO(OCIHandleAlloc((dvoid *)envhp,(dvoid **)&svchp,OCI_HTYPE_SVCCTX, 64,(dvoid **) &tmp));

 //!初始化服务器句柄
 ERRGOTO(OCIServerAttach( srvhp, errhp, (text *)serName1, (sb4) strlen(serName1), (ub4) OCI_DEFAULT));

 //!/将服务器句柄连接到服务上下文句柄
 ERRGOTO(OCIAttrSet ((dvoid *)svchp, OCI_HTYPE_SVCCTX,(dvoid *)srvhp, (ub4) 0, OCI_ATTR_SERVER, errhp));

 //!分配设置会话句柄,并向里填充用户名和密码
 ERRGOTO(OCIHandleAlloc ((dvoid *)envhp, (dvoid **)&usrhp,OCI_HTYPE_SESSION, 0, (dvoid **) 0));
 ERRGOTO(OCIAttrSet ((dvoid *)usrhp, OCI_HTYPE_SESSION,(dvoid *)userName1, (ub4)strlen(userName1),OCI_ATTR_USERNAME, errhp));
 ERRGOTO(OCIAttrSet ((dvoid *)usrhp, OCI_HTYPE_SESSION,(dvoid *)pwd1, (ub4)strlen(pwd1),OCI_ATTR_PASSWORD, errhp));

 //!建立会话
 ERRGOTO(OCISessionBegin (svchp, errhp, usrhp,OCI_CRED_RDBMS, OCI_DEFAULT));

 //!将会话句柄连接到服务上下文句柄
 ERRGOTO( OCIAttrSet (  (dvoid *)svchp, OCI_HTYPE_SVCCTX,(dvoid *)usrhp, (ub4) 0, OCI_ATTR_SESSION, errhp));

 //!分配语句句柄
 ERRGOTO(OCIHandleAlloc((dvoid *)envhp, (dvoid **)&stmthp, OCI_HTYPE_STMT, 0, 0));

 


 //!开始查询并获得结果
 text *delete_table = (text *)"delete from teststmt2";
 ERRGOTO(OCIStmtPrepare(stmthp,errhp,(text *)delete_table,strlen((char *)delete_table),OCI_NTV_SYNTAX,OCI_DEFAULT));
 ERRGOTO(OCIStmtExecute(svchp,stmthp,errhp,1,0,0,0,OCI_DEFAULT));


 int aa = 8;
 char bb[] = "bbbbbb";
 indicator = -1;
 text *insert_sql = (text *)"INSERT INTO teststmt2(a,b) values(:1,:2)";
 OCIBind* bindhp = 0;
 //!准备数据,,绑定参数
 ERRGOTO(OCIStmtPrepare(stmthp,errhp,(text *)insert_sql,strlen((char *)insert_sql),OCI_NTV_SYNTAX,OCI_DEFAULT));
 ERRGOTO(OCIBindByPos(stmthp,&bindhp,errhp,1, (dvoid *)&aa,4, SQLT_INT, (void*)&indicator, NULL, NULL,0,0,0));
 //OCIBindArrayOfStruct(bindhp,errhp,sizeof(int),0,0,0);

 ERRGOTO(OCIBindByPos(stmthp,&bindhp,errhp,2,(dvoid *)&bb, 6, SQLT_CHR,NULL,NULL,NULL,0,0,0));
 //OCIBindArrayOfStruct(bindhp,errhp,2,0,0,0);

 //!执行语句
 ERRGOTO(OCIStmtExecute(svchp,stmthp,errhp,1,0,0,0,0));
 
 indicator = -1;

 //!开始查询并获得结果
 ERRGOTO(OCIStmtPrepare(stmthp,errhp,(text *)select_sql,strlen((char *)select_sql),OCI_NTV_SYNTAX,OCI_DEFAULT));
 //!绑定以一个列
 ERRGOTO(OCIDefineByPos(stmthp,&defhp1,errhp,1,&a,sizeof(a),SQLT_INT, (void*)&indicator,0,0,OCI_DEFAULT));
 //ERRGOTO(OCIDefineArrayOfStruct(defhp1,errhp,sizeof(int),0,4,0));
 //!绑定以二个列

 indicator = -2;
 ERRGOTO(OCIDefineByPos(stmthp,&defhp2,errhp,2,&b, 20, SQLT_CHR, (void*)&indicator, 0, 0, OCI_DEFAULT));
 //ERRGOTO(OCIDefineArrayOfStruct(defhp2,errhp,2,0,2,0));
 //!执行语句
 ERRGOTO(OCIStmtExecute(svchp,stmthp,errhp,1,0,0,0,OCI_DEFAULT));
 //ERRGOTO(OCIStmtFetch(stmthp,errhp,1,OCI_FETCH_NEXT,0));

 printf("%d, %s, %d", a, b, indicator);

 ERRGOTO(OCITransCommit(svchp,errhp,0));

 
 //!释放各个资源
 
 //ERRGOTO(OCIHandleFree(srvhp,OCI_HTYPE_SERVER));
 //ERRGOTO(OCIHandleFree(errhp,OCI_HTYPE_ERROR));
 //ERRGOTO(OCIHandleFree(envhp,OCI_HTYPE_ENV));

 

 return ;
ERR:
 sb4 errcod=0;
 OraText msgerr[200]="";
 OraText msgstat[200]="";
 OCIErrorGet(errhp,1,msgstat,&errcod,msgerr,200,OCI_HTYPE_ERROR);
 printf((char *)msgerr);
 return;

 

}

linux

相关专题

更多
Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

2

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

2

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

0

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

29

2025.12.24

yandex外贸入口合集
yandex外贸入口合集

本专题汇总了yandex外贸入口地址,阅读下面的文章了解更多内容。

58

2025.12.24

添加脚注通用方法
添加脚注通用方法

本专题整合了添加脚注方法合集,阅读专题下面的文章了解更多内容。

1

2025.12.24

重启电脑教程汇总
重启电脑教程汇总

本专题整合了重启电脑操作教程,阅读下面的文章了解更多详细教程。

3

2025.12.24

纸张尺寸汇总
纸张尺寸汇总

本专题整合了纸张尺寸相关内容,阅读专题下面的文章了解更多内容。

5

2025.12.24

Java Spring Boot 微服务实战
Java Spring Boot 微服务实战

本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

1

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.6万人学习

Node.js 教程
Node.js 教程

共57课时 | 7.2万人学习

CSS3 教程
CSS3 教程

共18课时 | 3.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号