Я использую приведенный ниже код, чтобы получить количество столбцов в таблице оракула.Получение числа столбцов в таблице с использованием «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;
Я использовал «sprintf» для подготовки запроса, он был успешно выполнен. Но все же я получаю 0 за количество столбцов. – NJMR
Sory, я не говорю «встроенный SQL». Но я замечаю, что вы указываете SQL игнорировать ошибки. Теперь вы не можете получить ошибки/предупреждения, которые могут вам помочь. –
Я получал ошибку из-за "if (sqlca.sqlcode == 1403) break;" без петли. Поэтому я проигнорировал ошибки. – NJMR