You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle Apex:含Case语句的SQL Where子句报ORA-00905错误求助

问题原因与解决方案

错误根源

Oracle SQL中,CASE表达式不允许直接返回布尔值(instr(...)>0属于布尔判断结果),SQL层面仅支持返回标量数据类型(数字、字符串、日期等)。你原SQL中CASE的THEN和ELSE分支都返回了布尔值,后续又与1比较,违反了SQL语法规则,导致了ORA-00905: missing keyword错误。

修正方案

可以通过两种方式调整SQL:

方案1:将CASE返回值改为数字

把布尔判断转换为数字标识(符合/不符合分别返回1/0),再与1比较:

select
  name,
  last_name
from Emp_table
where 
  case
    when instr(:P1_CHECKBOX_2, name) > 0 
    then 1 -- 匹配P1_CHECKBOX_2时返回1
    when instr(:P1_CHECKBOX_1, last_name) > 0
    then 1 -- 匹配P1_CHECKBOX_1时返回1
    else 0 -- 都不匹配返回0
  end = 1

方案2:用逻辑表达式替代CASE(更简洁)

直接通过逻辑运算符实现需求逻辑,规避CASE的布尔值限制:

select
  name,
  last_name
from Emp_table
where 
  -- 如果P1_CHECKBOX_2有匹配的name则生效,否则匹配P1_CHECKBOX_1的last_name
  instr(:P1_CHECKBOX_2, name) > 0 
  OR 
  (instr(:P1_CHECKBOX_2, name) = 0 AND instr(:P1_CHECKBOX_1, last_name) > 0)

补充说明

Oracle APEX的复选框组提交值是以冒号分隔的字符串(如'张三:李四'),instr函数可以正确识别目标值是否在选中列表中,逻辑本身是可行的,仅需修正语法层面的布尔值问题即可。

内容的提问来源于stack exchange,提问作者JB999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 07:05:24