от
Странный вопрос, используя OCILIB, я пытаюсь извлечения данных/записей из таблицы с переменной связывания, используя
IN
пункта. Поскольку я использую
IN
П., Я передаю массив в переменной связывания. Я изменил массив пример интерфейса для этого. Ниже моя версия.
#include "ocilib.h"

#define ARRAY_SIZE 1000
#define STRING_SIZE 20

void err_handler(OCI_Error *err)
{
    printf("%s\n", OCI_ErrorGetString(err));
}

int main(void)
{
    OCI_Connection *cn;
    OCI_Statement  *st;
    OCI_Error      *err;

    char tab_str[ARRAY_SIZE][STRING_SIZE 1];
    int i;

    if (!OCI_Initialize(err_handler, NULL, OCI_ENV_DEFAULT | OCI_ENV_CONTEXT))
    {
        return EXIT_FAILURE;
    }
    cn = OCI_ConnectionCreate("DB", "USER", "PASS", OCI_SESSION_DEFAULT);
    OCI_SetAutoCommit(cn, TRUE);

    st = OCI_StatementCreate(cn);
    OCI_Prepare(st, "select * from products where name in (:s)");
    OCI_BindArraySetSize(st, ARRAY_SIZE);
    OCI_BindArrayOfStrings(st, ":s", (char*)tab_str, STRING_SIZE, 0);

    for (i = 0; i < ARRAY_SIZE; i  )
        sprintf(tab_str[i], "Name %d", i   1);

    if (!OCI_Execute(st))
    {
        printf("there was an error: %s\n", OCI_ErrorGetString(OCI_GetLastError()));
    }

    OCI_Resultset *rs = OCI_GetResultset(st);

    while (OCI_FetchNext(rs))
    {
        printf("code: %i, name %s\n", OCI_GetInt(rs, 1), OCI_GetString(rs, 2));
    }

    OCI_StatementFree(st);
    OCI_ConnectionFree(cn);
    OCI_Cleanup();
    return EXIT_SUCCESS;
}

выход
[amir@jump ~]$ ./test3
code: 1, name Name 1
Даже если в таблице 1000 записей (и кстати это магазин, что оно будет соответствовать запросу), код, к сожалению, возвращает только 1 запись. Я проверил оракул захвата связать таблицы, код по фактическим передается только первый элемент из массива. Я в полном замешательстве :) требуется помощь.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
...