oracle未执行语句句柄,OCI_INVALID_HANDLE - 无效的服务环境,连接或语句句柄

我得到这个错误:

OCI_INVALID_HANDLE - Invalid service context, connection or statement handle

我继承了这个代码:

initOracle(..) { .. //return successful or 0 }

int executeGetQuery(char * query, char * queryResultData) {

char stmt[255];

OCIError *errhp;

OCIDefine *defnp = (OCIDefine *) 0;

OCIStmt *stmthp;

OCISvcCtx *svchp; //server context handle (almost like DBPROCESS)

sb2 is_null;

memset((char *)stmt, 0, 255);

//TODO replace with query

sprintf((char *)stmt, "SELECT min(ID) as MINID FROM BNS_SAA_CONFIRMATIONS where SentToWssStatus<>'T'");

/* prepare statement */

if(checkerr(errhp, OCIStmtPrepare(stmthp, errhp, (text *) stmt,

(ub4) strlen((char *) stmt),

(ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT)) == OCI_ERROR)

return -1;

/* define output params */

if(checkerr(errhp, OCIDefineByPos(stmthp, &defnp, errhp, 1, (dvoid *) queryResultData,

(sword) strlen(queryResultData), SQLT_STR, (dvoid *) &is_null, (ub2 *)0,

(ub2 *)0, OCI_DEFAULT)) == OCI_ERROR)//maybe replace SQLT_STR w SQLT_CHR OMFWTD

return -1;

/* execute the statement */

status = OCIStmtExecute(svchp, stmthp, errhp, (ub4) 1, (ub4) 0, (CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT);

....

}

我觉得这些功能的错误面:OCIStmtExecute(..)或OCIDefineByPos(..)或OCIStmtPrepare(..)

问题: 我该如何摆脱这个错误并开始执行查询?

2012-02-27

Adrian

+1

你还有很长的路要走......你似乎有一堆是本地的函数处理的,但他们似乎没有在任何地方进行分配。首先我没有看到代码连接到服务器的一切都在这里,这就是你需要做的,有一个有意义的'OCISvcCtx.'我会建议你阅读到介绍到OCI编程文件,并采取一切演示的优势是什么oracle提供的代码,位于您链接到的文档的附录B中。 –

2012-02-27 21:23:39

+0

我想接受你的评论作为答案:)这是那些没有意义的名称(对我来说)的局部变量。请张贴它作为答案。谢谢! –

2012-02-27 21:50:12

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值