将变量传递给CLLE程序中的SQL语句

时间:2015-04-02 13:52:53

标签: sql db2 ibm-midrange

我希望得到一些SQL语句的帮助。

RUNSQL_X SQL('UPDATE mylib/myfile SET N53DSC = ''' *CAT &TEXT *CAT ''' where ''' *CAT + &N53GIDCHAR *CAT ''' = ''' *CAT &CHARID# *CAT ''')') COMMIT(*NONE) 

当我在CLLE程序中运行时,收到以下消息:

  

Token)无效。有效代币:或使用SKIP WAIT WITH。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

首先关注...使用像这样的动态语句,因为它们可以打开SQL注入攻击的可能性。在RPGLE中使用静态SQL语句会更安全。

但是如果你必须使用CLLE ......请尝试以下方法:

dcl  &quote  type(*CHAR) len(1) value ('''')
dcl  &stmt   type(*char) len(512)

chgvar  var(&stmt) value('UPDATE mylib/myfile set n53dsc = ' + 
              *CAT &quote *CAT &TEXT *CAT &quote +
              *CAT 'where ' *CAT &N53GIDCHAR *CAT '=' +
              *CAT &quote *CAT &CHARID# *CAT &quote) 
dmpclpgm
runsql_x SQL(&stmt) COMMIT(*NONE)

修改
根据您的评论。我要指出,一次读取一条记录并更新(使用SQL)对SQL的使用很差。

SQL是专门设计的&优化设置时间操作...

我认为以下内容可以实现您的目标......(不确定哪些字段在哪些表中)

update mylib/myfile
   set n53dsc = <TEXT>
  where n53gidchar in (select n53gidchar from mylib/otherfile)
        and n53gidchar = charid#