gpt4 book ai didi

c++ - 使用 ' Proc C-C` 获取表中的列数`

转载 作者:行者123 更新时间:2023-11-28 05:18:55 24 4
gpt4 key购买 nike

我正在使用以下代码获取 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);

当我执行代码时,它没有给出任何错误,但我得到“列数:0”作为输出。我指的是表中的几列。

我是不是做错了什么?

下面是声明部分...

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

最佳答案

不要在 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] 已经为空。 (不过没有坏处。)

关于c++ - 使用 ' Proc C-C` 获取表中的列数`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41936385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com