【PL/SQL】CASE式で条件分岐する方法:サンプル多数あり


ここではORACLE社が提供するPL/SQL言語のCASE式で条件分岐する方法を紹介しています。

CASE式の書き方

CASEでは指定した式・値が条件値に該当するかどうかで条件分岐する方法と、式・値を省略し、条件式だけで条件分岐させる方法があります。

CASE 式・値
WHEN 条件値1 THEN 処理1;
[ WHEN 条件値2 THEN 処理2; ]
[ ELSE 処理3; ]
END CASE;
CASE
WHEN 条件式1 THEN 処理1;
[ WHEN 条件式2 THEN 処理2; ]
[ ELSE 処理3; ]
END CASE;

CASE式のサンプル

1つの条件値だけを書く

1つの条件値だけを書くパターンです。
ある条件と一致する場合だけ処理をする条件分岐をさせることが出来ます。

DECLARE
    i NUMBER := 1;
BEGIN
    CASE i
        WHEN 1 THEN 
            DBMS_OUTPUT.PUT_LINE('〇');
    END CASE;
END;
〇
PL/SQLが実行されました(22 msec.)

複数の条件値を書く

CASE式ではWHEN~を追記することで、複数の条件値を指定し、条件分岐させることが出来ます。

DECLARE
    i NUMBER := 2;
BEGIN
    CASE i
        WHEN 1 THEN 
            DBMS_OUTPUT.PUT_LINE('A');
        WHEN 2 THEN 
            DBMS_OUTPUT.PUT_LINE('B');
        WHEN 2 THEN 
            DBMS_OUTPUT.PUT_LINE('C');
    END CASE;
END;
B
PL/SQLが実行されました(22 msec.)

式・値を省略して書く

CASE式では、式・値を省略して任意の条件式で条件分岐させることが出来ます。

次の例では「i = 1」という条件式で条件分岐させています。

DECLARE
    i NUMBER := 1;
BEGIN
    CASE
        WHEN i = 1 THEN 
            DBMS_OUTPUT.PUT_LINE('A');
    END CASE;
END;
A
PL/SQLが実行されました(6 msec.)

複数の条件式を書く

CASE式では、WHENを追記することで複数の条件式を追記することが出来ます。

DECLARE
    i NUMBER := 2;
BEGIN
    CASE
        WHEN i = 1 THEN 
            DBMS_OUTPUT.PUT_LINE('A');
        WHEN i = 2 THEN 
            DBMS_OUTPUT.PUT_LINE('B');
        WHEN i = 3 THEN 
            DBMS_OUTPUT.PUT_LINE('C');
    END CASE;
END;
B
PL/SQLが実行されました(6 msec.)

1つの条件式の中に複数の条件を書く

CASE式では、ANDやORの論理演算子を使うことで1つの条件式の中に複数の条件を書くことが出きます。

論理演算子は↓で紹介していますので参考にしてください。
>>PL/SQLで使える演算子まとめ

DECLARE
    i NUMBER := 2;
BEGIN
    CASE
        WHEN (i = 1) OR (i = 2) THEN 
            DBMS_OUTPUT.PUT_LINE('A');
    END CASE;
END;
A
PL/SQLが実行されました(6 msec.)

どの条件にも一致しない場合の処理を書く

CASE式では、ELSE~を追記することでどの条件にも一致しない場合の処理を書くことが出来ます。

DECLARE
    i NUMBER := 10;
BEGIN
    CASE
        WHEN i = 1 THEN 
            DBMS_OUTPUT.PUT_LINE('A');
        WHEN i = 2 THEN 
            DBMS_OUTPUT.PUT_LINE('B');
        WHEN i = 3 THEN 
            DBMS_OUTPUT.PUT_LINE('C');
        ELSE
            DBMS_OUTPUT.PUT_LINE('D');
    END CASE;
END;
D
PL/SQLが実行されました(22 msec.)

CASE式をネストして書く

CASE式の中に更にCASE式をネストして書くことが出来ます。

DECLARE
    i NUMBER := 1;
    j NUMBER := 2;
BEGIN
    CASE
        WHEN i = 1 THEN 
            DBMS_OUTPUT.PUT_LINE('A');
            CASE
                WHEN j = 2 THEN 
                    DBMS_OUTPUT.PUT_LINE('B');
            END CASE;
    END CASE;
END;
A
B
PL/SQLが実行されました(24 msec.)