Oracle Apex经典报告基于数值实现条件图标颜色格式化及报错处理
问题解决说明
报错原因
你遇到的ORA-00936: missing expression报错是由CASE表达式的语法错误导致的:
你使用的是仅支持等值匹配的简单CASE表达式写法(CASE 字段 WHEN 固定值 THEN 返回值),这种语法不支持>这类不等比较操作。同时你当前的判断顺序存在逻辑缺陷:数值较小的阈值放在前面时,大于高阈值的数值会优先匹配到低阈值的规则,导致高阈值的判断永远不会生效。
修正后的SQL代码
SELECT task_name, start_date, status, CASE WHEN status > 200 THEN 'fa-exclamation-triangle is-pending' WHEN status > 150 THEN 'fa-exclamation-circle is-holding' WHEN status > 100 THEN 'fa-check-circle is-closed' WHEN status > 50 THEN 'fa-clock-o is-open' ELSE 'fa-question-circle is-unknown' -- 可自定义未匹配场景的默认值 END status_icon, CASE WHEN status > 200 THEN 'orange' WHEN status > 150 THEN 'pink' WHEN status > 50 THEN 'green' WHEN status > 10 THEN 'red' ELSE 'gray' -- 可自定义未匹配场景的默认颜色 END icon_color, assigned_to FROM eba_ut_chart_tasks ORDER BY 2
关键修正点
- 改用搜索型CASE表达式,
CASE后不直接跟字段,每个WHEN子句写完整的判断条件status > xxx,支持不等值的规则判断 - 调整阈值判断顺序为从大到小,保证每个数值会匹配到符合要求的最高优先级规则
- 新增
ELSE分支处理所有未覆盖到的数值场景,避免返回空值
内容的提问来源于stack exchange,提问作者honeymoon
相关产品推荐
相关产品推荐

