4

在 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;

这是文档的问题还是我遗漏了什么?

4

1 回答 1

3

当您的 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
于 2013-11-07T13:38:47.570 回答