我希望得到一些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。
非常感谢任何帮助。
答案 0 :(得分:1)
首先关注...使用像这样的动态语句,因为它们可以打开SQL注入攻击的可能性。在RPGLE中使用静态SQL语句会更安全。
但是如果你必须使用CLLE ......请尝试以下方法:
dcl "e type(*CHAR) len(1) value ('''')
dcl &stmt type(*char) len(512)
chgvar var(&stmt) value('UPDATE mylib/myfile set n53dsc = ' +
*CAT "e *CAT &TEXT *CAT "e +
*CAT 'where ' *CAT &N53GIDCHAR *CAT '=' +
*CAT "e *CAT &CHARID# *CAT "e)
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#