У меня есть процедура со следующей подписью:
procedure countryExists(iCountryName in varchar2, oCount out integer)
Когда я запускаю ее с помощью OCILIB, я не могу получить правильное значение для oCount.Если я регистрирую его как целое число (используя OCI_RegisterInt), я получаю ошибку:
ORA-03116: неверная длина буфера передана в процедуру преобразования
Если я зарегистрирую еев виде строки он запускается, но OCI_GetString возвращает нулевой указатель, а OCI_GetInt возвращает 0 (вместо ожидаемого результата 1).
Код теста:
int init = OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT|OCI_ENV_CONTEXT);
OCI_Connection *cn = OCI_ConnectionCreate("mydb", "myuser", "mypass", OCI_SESSION_DEFAULT);
OCI_Statement *st = OCI_StatementCreate(cn);
int resultprepare = OCI_Prepare(st, "call mypackage.countryExists('BRAZIL', :oCount)");
//int registercount = OCI_RegisterString(st, ":oCount", 100);
int registercount= OCI_RegisterInt(st, ":oCount");
int executeresult = OCI_Execute(st);
OCI_Error *err1 = OCI_GetLastError();
const char *error1 = OCI_ErrorGetString(err1);
OCI_Resultset *resultset = OCI_GetResultset(st);
const wchar_t *valstr = OCI_GetString(resultset, 1);
int valint = OCI_GetInt(resultset, 1);
OCI_Error *err2 = OCI_GetLastError();
const char *error2 = OCI_ErrorGetString(err2);
Запуск процедуры с использованиемНапример, PL / SQL Developer работает нормально.
Это правильный способ вызова процедур с использованием OCILIB?
Также обратите внимание, что я использую смешанную версию библиотеки.