-2

我必须生成可以生成动态更新sql并执行它的ac程序。表名、要更新的列数和 where 子句中的列仅在运行时才知道。所以我将程序分成 2 个函数:

1) CheckTableExists - 检查用户提供的表是否存在于数据库中。 成功实施。

2) UpdateFunc - 根据用户提供的数据生成 sql 字符串并执行
查询。

我在第二个函数中遇到问题。我不接受要从用户更新的列、名称和值。然后我使用 for 循环并将名称和值附加到我的 sql 字符串中:

sqlstring = 更新选项卡名 set colname = colval,colname = colval where

然后我接受 where 子句数据并将其附加到我的字符串中。所以我的最后一个字符串是:

sqlstring = 更新选项卡名 set colname = colval,colname = colval where whcolname = whcolval

但是当我执行它时,我的程序挂起。有人可以告诉我
执行第二个函数的理想方法是什么。

4

1 回答 1

2

strSQL将是一个有效的 SQL 语句,没有用于绑定的占位符。这适用于带有数字和 varchar2 变量的查询。对于二进制文件,您可能必须在 Oracle 中实现 bin2hex() 和 hex2bin() 等函数。

一个简单的函数,如:

int Exec_Query(sql_context sqlCtx, char *strSQL)
{

//    struct sqlca sqlca;

    /* Sanity checks for sqlCtx and strSQL */

    EXEC SQL WHENEVER SQLERROR GOTO QueryErr;  

    /* Set the context */
    EXEC SQL CONTEXT USE :sqlCtx;  

    /* Execute the query */
    EXEC SQL EXECUTE IMMEDIATE :strSQL; 

    EXEC SQL COMMIT; 

    return 0;

QueryErr:
    /* printf("Err: Failure in Executing Query\n"); */
    /* printf("Debug: <%s>",sqlca.sqlerrm.sqlerrmc); */
    return -1;
}

通过 Pro*C 编译器将提供一个工作 C 文件。

于 2013-02-02T08:01:57.580 回答