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

Oracle SQL中CASE语句为何不能保留空值?报错ORA-00920

ORA-00920错误分析与解决(CASE语句空值问题)

错误原因

你写的CASE语句里,WHEN '' AND CS.START <> '99'这类写法存在语法错误:

  • Oracle中''等价于NULL,而单独的''没有和任何字段做比较操作,直接跟AND不符合SQL语法规范,这才是触发ORA-00920: INVALID RELATIONAL OPERATOR的根本原因,并非“无法保留空值”的问题。
  • 另外Oracle里判断空值不能用= ''或<>,必须用IS NULL/IS NOT NULL,因为''本质就是NULL,= NULL这类表达式永远不成立。

解决方法

首先明确你的业务逻辑:如果是想判断某个字段为空的情况,需要把空值判断补全。比如假设你是想判断CS.COLUMN_NAME为空时执行后续条件,修正后的语句如下:

SELECT
    CASE 
        -- 当指定字段为空且START不等于'99'时返回CSE
        WHEN CS.COLUMN_NAME IS NULL AND CS.START <> '99' THEN 'CSE'
        -- 当指定字段为空且START等于'99'时返回ECE
        WHEN CS.COLUMN_NAME IS NULL AND CS.START = '99' THEN 'ECE'
        -- 当另一字段为空且START不等于'99'时返回CIVIL_E
        WHEN CS.OTHER_COLUMN IS NULL AND CS.START <> '99' THEN 'CIVIL_E'
        -- 所有条件不满足时默认返回NULL(可省略,CASE默认返回NULL)
        ELSE NULL
    END AS STREAM
FROM
    C_STREAM CS

如果你的需求是“当没有匹配的WHEN条件时保留空值”,CASE语句本身就会默认返回NULL,不需要额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:22:09