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

PL/SQL ブロック内でケース式 (単純なケース式か検索ケース式かに関係なく) を使用する場合は、null 以外の戻り式が少なくとも 1 つ必要です。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 に答える