您好我有一个存储过程,它接受来自java的参数“Q_RES”。它的值是“Y”或“N”。在我的存储过程中,我有一个条件
If Q_RES = 'Y' THEN
sp_stat = 'TABLENAME.RES IN (' || Q_RES || ')';
END IF
坚果我得到错误有ORA-00904:“Y”无效标识符
我该如何解决这个问题?
答案 0 :(得分:0)
在PL / SQL中,赋值是Pascal样式:=', not
=`。除此之外,我没有看到这里显示的字符串连接有任何问题。
我怀疑稍后在编写动态SQL时会使用sp_stat
。我将仔细研究正在生成的SQL。它可能看起来像这样:
... TABLENAME.RES IN (Y) ...
如果将其解释为SQL文本,Oracle会将裸字Y
视为标识符,例如列名,并尝试解决该问题。 (如果查询中引用的表具有名为Y
的列,则查询不会引发有关无效标识符的错误。
在这里猜测,但我怀疑我们希望Y是一个字符串文字。字符串文字用单引号括起来,如下所示:
... TABLENAME.RES IN ('Y') ...
要在字符串文字中获取单引号,我们可以使用两个单引号,例如
'I''m happy this is working'
由于我们已经知道Q_RES
等于'Y'
,为什么不这样做:
sp_stat := 'TABLENAME.RES IN (''Y'')';
^^ ^^
或者,如果我们想引用Q_RES
,请将其用单引号括起来,如下所示:
sp_stat := 'TABLENAME.RES IN (''' || Q_RES || ''')';
^^ ^^