DB2的.SQC文件,一般使用的SQL为静态SQL。如有这样的需求,update 某一个表中的一列,但更新的列名和值需要在运行时作为参数传入,如何实现?参照以下代码。(需要更新的表名为MyTable,主键列为Key_col)
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char sql_sta[256];
char keyVal[9];
char colName[128];
char colVal[1024];
EXEC SQL END DECLARE SECTION;
long UpdateTableAnyColumn( char* key , char * name , char * val )
{
EXEC SQL WHENEVER NOT FOUND GO TO error;
EXEC SQL WHENEVER SQLERROR GO TO error;
sprintf( sql_sta , "update MyTable set %s = ? where key_col=?" , name );
strcpy( keyVal , key);
strcpy( colVal , val );
EXEC SQL PREPARE s1 from :sql_sta;
EXEC SQL EXECUTE s1 using :colVal,:keyVal;
return HRC_SQL_NORMAL;
error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
return HRC_SQL_ERR;
}
sql语句由主机变量sql_sta保存,运行期进行prepare,执行时由主机变量colVal和KeyVal传入参数。