SQLRPGLE DB2 Select into变量
我的查询返回错误时遇到问题。此刻我所拥有的是:SQLRPGLE DB2 Select into变量,select,db2,Select,Db2,我的查询返回错误时遇到问题。此刻我所拥有的是: comi C X'7D' SqlQuery S 500A VarSel S 10A VarSel = *blanks; SqlQuery = 'select USU into VarSel from FXXUSEL
comi C X'7D'
SqlQuery S 500A
VarSel S 10A
VarSel = *blanks;
SqlQuery = 'select USU into VarSel from FXXUSELN ' +
'where USU = upper(' + comi + %trim(pusuario) +
comi + ') and PWDUSU = upper(' + comi +
%trim(ppassword) + comi + ')';
Exec SQL execute immediate :SqlQuery;
psqlcod = sqlcod;
但当我尝试调试该代码时,它返回-084:不可接受的SQL语句作为sqlcod。在调试器调用中打印SqlQuery变量会得到以下字符串,这似乎是正确的:
select USU into VarSel from FXXUSELN where USU = upper('usua
rio') and PWDUSU = upper('password')
有人知道如何解决这个问题,这样我就可以建立一个登录存储过程了吗?提前感谢。问题是无法动态准备“选择进入” 如果查看中的
选择进入的调用部分,您将看到:
此语句只能嵌入到应用程序中。它是一个无法动态准备的可执行语句。不得在REXX中指定
另请注意手册附录B的以下章节,该章节总结了每种陈述的使用位置/方式
最后,如果您尝试的方法成功了,那么您将面临SQL注入攻击。一般来说,对于任何数据库,都应该避免使用动态SQL。如果必须使用动态SQL,那么应该使用参数生成器,而不是直接将用户输入连接到字符串中
在您的情况下,如果首先需要动态SQL,那么就不需要动态SQL。静态SQL更容易、更安全,并且允许使用SELECT-INTO
exec SQL
select USU into :VarSel from FXXUSELN
where USU = upper(:pusuario)
and PWDUSU = upper(:ppassword);