使用'获取表格中的列数。 Proc C-C``

时间:2017-01-30 12:49:57

标签: c++ c oracle oracle-pro-c

我使用下面的代码来获取oracle表中的列数。

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);

当我执行代码时,它没有给出任何错误,但我得到了&#34;列数:0&#34;作为输出。 我所指的表中列数很少。

我在这里做错了吗?

以下是声明部分......

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

1 个答案:

答案 0 :(得分:1)

不要&#34;逃避&#34; 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]已经为空。 (不过没有坏处。)