Получение количества столбцов в таблице с помощью ‘Proc C-C«

Я использую приведенный ниже код, чтобы получить количество столбцов в таблице оракула.

char selectQuery[30000] = {'\0'};
strcpy(selectQuery, "SELECT COUNT(*) FROM USER_TAB_COLUMNS WHERE TABLE_NAME=\'");
strcat(selectQuery, tableName);
strcat(selectQuery, "\'");

strcpy((char*) stmt.arr, selectQuery);
stmt.len = strlen((char*) stmt.arr );
stmt.arr[stmt.len]= '\0';

EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL WHENEVER NOT FOUND CONTINUE;

EXEC SQL DECLARE SELECTCOLNU STATEMENT;
EXEC SQL PREPARE SELECTCOLNU FROM :stmt;

if(sqlca.sqlcode != 0)
{
DEBUG_LOG("SQL-ERR:Preparation of SELECT Query to get number of columns failed: Ora-Err: %d %s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
return PREPARATION_FAILURE;
}

EXEC SQL EXECUTE SELECTCOLNU INTO:columnsNo;
if(sqlca.sqlcode < 0)
{
DEBUG_LOG("SQL-ERR:Execute failed: Ora-Err: %d %s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
return EXECTUION_FAILURE;
}

DEBUG_LOG("Number of columns: %d\n", columnsNo);

Когда я выполняю код, он не выдает никакой ошибки, но я получаю «Количество столбцов: 0» в качестве вывода.
В таблице, на которую я ссылаюсь, есть несколько столбцов.

Я что-то здесь не так делаю?

Ниже раздел декларации …

EXEC SQL BEGIN DECLARE SECTION;
int columnsNo;
VARCHAR stmt[MAX_SQL];
EXEC SQL END DECLARE SECTION;

0

Решение

Не «избегай» ' в C-струне. Это будет иметь \' просто в строке, и это не то, что вы хотите, потому что ' это кавычка строки базы данных, которую вы теперь избегаете для базы данных и база данных не понимает запрос сейчас.

sprintf(selectQuery, "SELECT COUNT(*) FROM USER_TAB_COLUMNS WHERE TABLE_NAME='%s'", tableName);

Замечания:

stmt.len = strlen((char*) stmt.arr );
stmt.arr[stmt.len]= '\0';

В выше strlen считает количество символов до нулевого символа. таким образом stmt.arr[stmt.len] уже ноль. (Никакого вреда, хотя.)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]