It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center
                            
                        
                    
                
                                7年前关闭。
            
                    
我必须生成一个可以生成动态更新sql并执行它的c程序。
表名,要更新的列数和where子句中的列是已知的
只在运行时。所以我将程序分为2个功能:

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

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

我在第二个功能中遇到问题。我不接受任何列,名称和值
从用户更新。然后,我使用一个for循环并将名称和值附加到我的sql中
串:

sqlstring =更新tabname设置colname = colval,colname = colval其中

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

sqlstring =更新tabname设置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 Query\n"); */
    /* printf("Debug: <%s>",sqlca.sqlerrm.sqlerrmc); */
    return -1;
}


通过Pro * C编译器将提供有效的C文件。

09-27 03:38