问题描述
我正在尝试使用 Oracle OCI 执行一个简单的存储过程。存储过程将字符串作为输入并将其复制到输出参数。下面是我正在执行的 oracle 语句:
DECLARE OutParam VARCHAR2(50);
BEGIN
my_stored_procedure('Test String',OutParam);
END;
我写的OCI代码如下:
/* Bind a placeholder for the output parameter */
if (status = OCIBindByPos(stmthp,&bnd6p,errhp,1,(dvoid *)result,1024,sqlT_STR,(dvoid *)0,(ub2 *)0,(ub4)0,(ub4 *)0,OCI_DEFAULT))
{
checkerr(errhp,status);
cleanup();
return OCI_ERROR;
}
/* execute and fetch */
if (status = OCIStmtExecute(svchp,stmthp,(ub4)1,(CONST OCISnapshot *) NULL,(OCISnapshot *)NULL,OCI_DEFAULT))
{
if (status != OCI_NO_DATA)
{
checkerr(errhp,status);
cleanup();
return OCI_ERROR;
}
}
使用 Oracle 11g 和旧版本,这工作正常,我能够将输出参数存储在我在 OCIBindByPos 调用中使用的“result”变量中。
但是,对于 Oracle 12 及更高版本,这对我不起作用,我收到以下错误:
OCI_ERROR - ORA-03137:来自客户端的格式错误的 TTC 数据包被拒绝:[kpoal8Check-5] [32768]
有谁知道为什么这不适用于 Oracle 12 及更高版本?我用 Oracle 12 和 Oracle 19 对此进行了测试,并得到了同样的错误。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)