在DB2 预编译C中使用动态SQL

      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传入参数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值