在Oracle 11g R2的SQL语言参考中,simple CASE expressions的文档说:
您不能为每个return_expr和else_expr指定文字NULL。
但是,以下SQL执行没有问题并返回null:
select case 'test'
when 'test' then null
else null
end "Null Test"
from dual;
这是文档的问题还是我错过了什么?
答案 0 :(得分:3)
当在PL / SQL块中使用case表达式(无论是简单表达式还是搜索表达式表达式)时,必须至少有一个非null返回表达式。在SQL中,这个限制很轻松:
这是文档的问题还是我遗漏了什么
这似乎是一个小文档错误。
SQL:
SQL> select case 1
2 when 1 then null
3 else null
4 end as res
5 from dual
6 ;
结果:
RES
---
null
PL / SQL:
SQL> declare
2 l_res number;
3 begin
4 l_res := case 1
5 when 1 then null
6 else null
7 end;
8 end;
9 /
ORA-06550: line 4, column 11:
PLS-00617: at least one result in the CASE expression must not be NULL
ORA-06550: line 4, column 2:
PL/SQL: Statement ignored