2017-03-02 7 views
0

大文字小文字の区別は、大文字小文字の区別ブロック内で使用されています。 私のクエリは次のようになります。Oracle:ケースステートメントでNullを処理する

SELECT 'TEST' FROM DUAL WHERE 1=1 AND EXISTS(
SELECT 
    CASE 
    WHEN EXISTS 
    (Select 1 from dual where 1=2) 
    THEN 1 
    ELSE 
    (Select 1 from dual where 1=2) 
    END 
FROM DUAL); 

私はケース-とき文がレコードを返す場合にのみ、私のSELECTステートメントを実行したいです。

SELECT 
    CASE 
    WHEN EXISTS 
    (Select 1 from dual where 1=2) 
    THEN 1 
    ELSE 
    (Select 1 from dual where 1=2) 
    END 

だから、基本的に、私は「TEST」を印刷したいという記録(またはnull値)が返されない場合にのみ:このコードは常にNULLを返すのでしかし、それは常に「テスト」を出力します。どうすればこれを達成できますか?

+0

条件を代わりにWHERE句に移動します。 – jarlh

答えて

2

NULLの値を持つ1つの列の行は、存在しない行と同じではありません。だから、EXISTSを使って、あなたが望むものを正確に行うことはできません。 1つの方法は、次のようにします。

SELECT 'TEST' 
FROM DUAL 
WHERE 1 = 1 AND 
     1 = (SELECT CASE WHEN EXISTS(Select 1 from dual where 1=2) 
         THEN 1 
         ELSE 0 
        END 
      FROM DUAL 
     ); 

つまり、行の存在を確認するのではなく、特定の値を探します。

関連する問題