otl连接数据库时,取number类型数据时,需要to_char,为何?

发布于 2021-11-19 14:33:55 字数 1911 浏览 878 评论 0

问题描述:
使用OTL的pro*c方法连接Oracle数据库时,取NUMBER 数据类型,报错。
将NUMBER数据to_char转为字符串时,可以取出。详见下面部分代码。
即:
sprintf(sqlBuf,"SELECT to_char(CTRL_FLAG) FROM cct_business_ctrl where op_code='8000' and ctrl_no=10001 ");
求大神解释?
环境:
AIX Version 6.1! 
数据库:/oracle9i/app/oracle/product/9.2.0

部分代码如下:

OCIEnv* envhp; 		/*OCI environment handle*/
 	OCISvcCtx* svchp; 		/*OCI Service context handle*/
	char sqlBuf[INTER_SQLBUF_LEN];	
	int ctrl_flag=0;
	char sctrl_flag[2]; memset(sctrl_flag,0x0,sizeof(sctrl_flag));
	otl_nocommit_stream otl_sql_handle;
 	if(SQLEnvGet((dvoid *)context,&envhp)){
  	    sprintf(inter_pubinfo->ErrMsg,"get an OCI formatted environment handle from the primary connection Error[SQLEnvGet(0,&envhp)],Please Check.");
            return -1;
 	}

 	if(SQLSvcCtxGet((dvoid *)context,(text *) NULL,(ub4) 0,&svchp)){
            ...
            return -1;
 	}
	otl_connect otl_dbcon;
	memset(inter_pubinfo,0,sizeof(INTER_PUBINFO_TYPE));
	inter_pubinfo->otlcon=&otl_dbcon;
 	otl_connect::otl_initialize();
 	try{
  	    otl_dbcon.rlogon(envhp,svchp);
	    memset(sqlBuf,0,sizeof(sqlBuf));
	    /*sprintf(sqlBuf,"SELECT CTRL_FLAG FROM cct_business_ctrl where op_code='8000' and ctrl_no=10001 ");    取不出数据,注:CTRL_FLAG 是 NUMBER(1) 数据类型*/
	    sprintf(sqlBuf,"SELECT to_char(CTRL_FLAG) FROM cct_business_ctrl where op_code='8000' and ctrl_no=10001 ");    //可以取出数据
	    otl_sql_handle.open(1,sqlBuf,otl_dbcon);
	    otl_sql_handle>>sctrl_flag;
	    if(0 == otl_sql_handle.get_rpc()){
	        printf("取标示错误,请检查!");
	        otl_sql_handle.close();
               return -1;
            }
            otl_sql_handle.close();
            ctrl_flag = atoi(sctrl_flag);    
//......

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文