Ошибка Oracle OCI при выполнении хранимой процедуры с выходным параметром

#oracle #oracle-call-interface

Вопрос:

Я пытаюсь выполнить простую хранимую процедуру с помощью 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, amp;bnd6p, errhp, 1,
    (dvoid *)result, 1024, SQLT_STR,
    (dvoid *)0, (ub2 *)0, (ub2 *)0, (ub4)0, (ub4 *)0, OCI_DEFAULT))
{
    checkerr(errhp, status);
    cleanup();
    return OCI_ERROR;
}


/* execute and fetch */
if (status = OCIStmtExecute(svchp, stmthp, errhp, (ub4)1, (ub4)0,
    (CONST OCISnapshot *) NULL, (OCISnapshot *)NULL, OCI_DEFAULT))
{
    if (status != OCI_NO_DATA)
    {
        checkerr(errhp, status);
        cleanup();
        return OCI_ERROR;
    }
}
 

С Oracle 11g и более старыми версиями это работало нормально, и я смог получить выходной параметр, сохраненный в переменной «результат», которую я использовал в вызове OCIBindByPos.

Однако с Oracle 12 и выше это не работает для меня, я получаю следующую ошибку:

OCI_ERROR — ORA-03137: неправильно сформированный пакет TTC от клиента отклонен: [kpoal8Check-5] [32768]

Кто-нибудь знает, почему это не работает с Oracle версий 12 и выше? Я проверил это с помощью Oracle 12 и Oracle 19 и получил ту же ошибку.

Комментарии:

1. Взгляните на community.oracle.com/tech/developers/discussion/4337508/… и support.oracle.com/knowledge/Oracle Database Products/…