SQL中CASE语句如何接收用户输入?SQL Developer执行报错求助
解决ORA-00904: "INPUT": invalid identifier错误
你的问题出在CASE语句里直接使用了input作为判断对象,但input并不是DUAL表的列,也不是已定义的变量——你用的&input是SQL Developer的替换变量,执行时会被替换成你输入的具体值,但input本身没有被识别为有效标识符。
下面是几种可行的修复方案:
方案1:直接在CASE中使用替换变量
把CASE里的input换成&input,让判断逻辑直接引用同一个替换变量:
SELECT &input, (CASE &input WHEN '1' THEN 'Yes' WHEN '2' THEN 'No' WHEN '3' THEN 'Maybe' ELSE 'Wrong' END) Answer FROM DUAL;
执行时SQL Developer会提示你输入input的值,输入后就能正常返回对应结果。
方案2:先定义变量再引用
用DEFINE提前定义变量,后续直接引用,适合需要重复使用变量的场景:
-- 可以直接在这里赋值,或者执行时会提示输入 DEFINE input = '2'; SELECT &input, (CASE &input WHEN '1' THEN 'Yes' WHEN '2' THEN 'No' WHEN '3' THEN 'Maybe' ELSE 'Wrong' END) Answer FROM DUAL;
方案3:用子查询封装输入值
把替换变量的值作为列别名,在子查询中定义后,外层查询的CASE可以直接引用这个别名:
SELECT val, (CASE val WHEN '1' THEN 'Yes' WHEN '2' THEN 'No' WHEN '3' THEN 'Maybe' ELSE 'Wrong' END) Answer FROM ( SELECT &input AS val FROM DUAL );
内容的提问来源于stack exchange,提问作者John Joy
相关产品推荐
相关产品推荐

