2015年11月10日火曜日

PLSQL 制御文 ~CASE文~

Oracle9i以降でのみCASE文が使用できます。
Case文には「単純CASE文」と「検索CASE文」の2種類の書き方があります。

単純CASE文

単純なCASE文の構造は、次のとおりです。
CASE 判定する変数
WHEN リテラル値1 THEN リテラル値1に該当したときの処理
WHEN リテラル値2 THEN リテラル値2に該当したときの処理
ELSE どのリテラル値にも該当しなかった時の処理
END CASE;
注意点はNullを判定できないこと。nullを判定したいときは検索CASE文を使用します。
各判定はC#と違ってフォールスルーではないので、処理ごとにbreakの記述はいりません。
DECLARE
    rank VARCHAR2(1);
    dispRank VARCHAR2(10);
BEGIN
    rank := 'B';

    CASE rank
    WHEN 'A' THEN  dispRank := '上級';
    WHEN 'B' THEN  dispRank := '中級';
    WHEN 'C' THEN  dispRank := '初級';
    ELSE dispRank := 'その他';
    END CASE;
    
    SYS.DBMS_OUTPUT.PUT_LINE(dispRank);
  
END;

検索CASE文

検索CASE文の構造は、次のとおりです。
CASE 
WHEN 条件式1 THEN 条件式1に該当したときの処理
WHEN 条件式2 THEN 条件式2に該当したときの処理
ELSE どの条件式にも該当しなかった時の処理
END CASE;
単純CASE文ではNullを判定できませんが検索CASE文ではnullを判定できます。
各判定はC#と違ってフォールスルーではないので、処理ごとにbreakの記述はいりません。
DECLARE
    rank VARCHAR2(1);
    dispRank VARCHAR2(10);
BEGIN
    rank := null;

    CASE 
    WHEN rank = 'A' THEN  dispRank := '上級';
    WHEN rank = 'B' THEN  dispRank := '中級';
    WHEN rank = 'C' THEN  dispRank := '初級';
    WHEN rank IS NULL THEN dispRank := '未設定';
    ELSE dispRank := 'その他';
    END CASE;
    
    SYS.DBMS_OUTPUT.PUT_LINE(dispRank);
  
END;

0 件のコメント: