ここでは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.)