ORA-01008: не все переменные связаны (в C w OCI) - PullRequest
0 голосов
/ 08 февраля 2012

У меня есть следующий код 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);END;

Вопрос
Как исправить эту ошибку?

РЕДАКТИРОВАТЬ
Я видел похожие вопросы с ответамиздесь в C # или Java, но не в C
«ORA-01008: не все переменные связаны» ошибка
ORA-01008: не все переменные связаны.Они связаны

1 Ответ

4 голосов
/ 08 февраля 2012

Похоже, небольшая ошибка.Ваш второй вызов OCIBindByPos должен использовать 2 вместо 1 для четвертого параметра:

if( checkerr(errhp, OCIBindByPos(stmthp, &bndhp, errhp, (ub4) 2, (dvoid *) saaMessage,
...