在 Oracle 11g R2 的 SQL 语言参考中,简单 CASE 表达式的文档说:
您不能为每个 return_expr 和 else_expr 指定文字 NULL。
但是,以下 SQL 执行没有问题并返回 null:
select case 'test'
when 'test' then null
else null
end "Null Test"
from dual;
这是文档的问题还是我遗漏了什么?
在 Oracle 11g R2 的 SQL 语言参考中,简单 CASE 表达式的文档说:
您不能为每个 return_expr 和 else_expr 指定文字 NULL。
但是,以下 SQL 执行没有问题并返回 null:
select case 'test'
when 'test' then null
else null
end "Null Test"
from dual;
这是文档的问题还是我遗漏了什么?
当您的 case 表达式(无论是简单的还是搜索 case 表达式)在 PL/SQL 块中使用时,您必须至少有一个非空返回表达式。在 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