我必须生成一个可以生成动态更新SQL并执行它的c程序。表名、要更新的列数和已知子句中的列仅在运行时。所以我将我的程序分为 2 个函数:
1)检查表存在 - 检查用户提供的表是否存在于db中。成功实施。
2)UpdateFunc - 从用户提供的数据生成SQL字符串并执行
查询。
我在第二个功能中遇到问题。我接受没有列,名称和值从用户更新。然后我使用 for 循环并将名称和值附加到我的 sql字符串:
sqlstring = 更新选项卡名称集 colname = colval,colname = colval 其中
然后我接受 where 子句数据并将其附加到我的字符串中。所以我的最后一个字符串是:
sqlstring = 更新选项卡名称集 colname = colval,colname = colval,其中 whcolname = whcolval
但是当我执行它时,我的程序挂起了。有人可以告诉我应该是什么吗
执行第二个功能的理想方法。
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 Queryn"); */
/* printf("Debug: <%s>",sqlca.sqlerrm.sqlerrmc); */
return -1;
}
通过Pro*C编译器将给出一个有效的C文件。