使用输出参数执行存储过程时出现 Oracle OCI 错误

问题描述

我正在尝试使用 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 (将#修改为@)