Oracle CASE表达式文档问题

时间:2013-11-07 13:22:10

标签: sql oracle

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

这是文档的问题还是我错过了什么?

1 个答案:

答案 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