2016-05-03 10 views
1

if elsifcaseの内部でOracle 11Gを使用するにはどうすればよいですか?Oracle IF inside CASE

別の列に基づいてtype_pre値を3または4で終了したいと考えています:gr.gt_id

実行しようとしましたが、エラーメッセージにキーワードがありません。

このタスクを実行するより良い方法はありますか?

CASE 
    WHEN certv.id IS NOT NULL THEN NULL 
    WHEN cert.id IS NOT NULL THEN 
     IF gr.gt_id = 0 THEN type_pre = 3 
     ELSIF gr.gt_id = 1 THEN type_pre = 4 
     END IF 
    WHEN not.id IS NOT NULL THEN NULL 
END as type_pre, 
+0

プレーンSQLまたはPL/SQLプロシージャ/関数/ etcでこれを実行していますか? – mathguy

+0

これはビューですが、プレーンなSQLにも役に立ちます –

答えて

2
CASE 
    WHEN certv.id IS NOT NULL     THEN NULL 
    WHEN cert.id IS NOT NULL and gr.gt_id = 0 THEN 3 
    WHEN cert.id IS NOT NULL and gr.gt_id = 1 THEN 4 
    WHEN not.id IS NOT NULL     THEN NULL 
END as type_pre, 
+0

感謝@mahguyそれはsuccintly SQL構文のdiferencesのように動作しています。 –

1

私は誰もがあなたに過ちを説明していない参照してくださいので、あなたは間違ってwen'tところ、私は私に言わせて:

まず、ネストされたIFの/ケースのための必要はありません、それはで行うことができます@mathguy答えのように毎回シングルケース。

IFは、PL/SQLで使用され、Oracleに直接使用することはできませんので、あなたは、ネストされた条件で、あなたの方法でそれをやってみたかったならば、これはあなたのクエリされている必要があります:

CASE 
     WHEN certv.id IS NOT NULL THEN NULL 
     WHEN cert.id IS NOT NULL THEN 
     CASE WHEN gr.gt_id = 0 THEN = 3 
      WHEN gr.gt_id = 1 THEN = 4 END 
     WHEN not.id IS NOT NULL THEN NULL 
    END as type_pre, 

あなたIFの使用に加えて2番目の問題は、THEN部分のステートメントの使用でした。これはCASE EXPRESSIONです。なぜなら、私はtype_pre部分を削除したため、文ではなく値を入れることができます。