0

Oracle 11g: 次の 2 つの CASE ステートメントを検討してください。

検索されたケース

with null_table as (select null as null_set from dual )
select 
     case 
     when (null_set is null) then 'NULL INDEED'
     else 'NOTNULL?'
     end as AM_I_NULL_OR_NOT   
from null_table

シンプルなケース

with null_table as (select null as null_set from dual )
select 
     case null_set
     when  (null) then 'NULL INDEED'
     else 'NOTNULL?'
     end as AM_I_NULL_OR_NOT   
from null_table

Searched CASEでは null_setが期待どおりに評価されますが、Simple CASE ではそうではないようです。

質問: null_setで単純な CASE 評価を実行するにはどうすればよいですか?

Simple CASE がそのように評価されるのはなぜですか?

4

1 に答える 1

3

=Oracleでは、nullを演算子の使用と比較することはできません。

例えば:

select * from dual where null = null; -- No result
select * from dual where 1 = 1; -- gives a result

したがって、あなたができることはNVL、nullを別の値に置き換えるために使用することです:

with null_table as (select null as null_set from dual )
select 
     case nvl(null_set,'X')
     when  'X' then 'NULL INDEED'
     else 'NOTNULL?'
     end as AM_I_NULL_OR_NOT   
from null_table

(フィールドが値(例ではX)と等しくならないようにしてください。)

于 2013-01-17T19:09:07.913 に答える