ORA-01008: не все переменные связаны (в C w OCI)
У меня есть следующий код C, который использует хранимую процедуру для вставки 2 строк в базу данных:
char query[1024];
memset(query, 0, sizeof(query));
sprintf(query, "BEGIN bns_saa_message_insert (:1, :2); END;");
/* prepare statement */
if( checkerr(errhp, OCIStmtPrepare(stmthp, errhp, (text *) query,
(ub4) strlen((char *) query),
(ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT)) == OCI_ERROR)
return -1;
/* bind input params */
if( checkerr(errhp, OCIBindByPos(stmthp, &bndhp, errhp, (ub4) 1, (dvoid *) hostNumber,
(sword) sizeof(hostNumber) - 1, SQLT_CHR, (dvoid *) 0,
(ub2 *) 0, (ub2) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT)) == OCI_ERROR)
return -1;
if( checkerr(errhp, OCIBindByPos(stmthp, &bndhp, errhp, (ub4) 1, (dvoid *) saaMessage,
(sword) sizeof(saaMessage) - 1, SQLT_CHR, (dvoid *) 0,
(ub2 *) 0, (ub2) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT)) == OCI_ERROR)
return -1;
//end of param binding
printf ("query:% s", query); // это показывает, что param1 и param2 не были заменены, когда я делал привязку выше
/* execute the statement */
status = OCIStmtExecute(svchp, stmthp, errhp, (ub4) 1, (ub4) 0,
(CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT);
Я получаю ошибку:
ORA-01008: не все переменные связаны
и printf, обрисованный в общих чертах в выходных данных кода:
запрос: BEGIN bns_saa_message_insert (:1,:2); КОНЕЦ;
Вопрос
Как я могу исправить эту ошибку?
РЕДАКТИРОВАТЬ
Я видел похожие вопросы, ответили здесь в C# или Java, но не C
Ошибка "ORA-01008: не все переменные связаны"
ORA-01008: не все переменные связаны. Они связаны
1 ответ
Решение
Это выглядит как незначительная ошибка. Ваш второй звонок OCIBindByPos
следует использовать 2
вместо 1
для четвертого параметра:
if( checkerr(errhp, OCIBindByPos(stmthp, &bndhp, errhp, (ub4) 2, (dvoid *) saaMessage,