PL/SQL において比較的最近になって実装された選択制御構造が CASE 文である。CASE 文は Oracle 9i から使用できる。CASE 文の使用により見た目にも処理的にもスッキリとした条件文となる。⇔ SQL の CASE 式
条件テスト CASE 文 による条件分岐
CASE 文は SQL 文中に書くことができる CASE 式 と基本的には同じである。2種類の記法がある。
ちなみに CASE 文と CASE 式の簡単な違いは、CASE 文はステートメント処理を記述する文であり、CASE 式は 1 つの値を戻す式(関数のようなもの)である。
単純 CASE 文 (simple case statement)
ある式の値を元に分岐するもの
単純 CASE 文は、IF の羅列や SELECT をともなう DECODE 関数を使用するより見やすく、さらに高速に動作する。
CASE expr
WHEN comparison_expr1 THEN statement1
WHEN comparison_expr2 THEN statement2
ELSE default_statement
END CASE ;
C 言語などのように、フォールスルー(※)は行なわれず、処理は必ず break する。
単純 CASE 文 を 汎用的な IF 文 で表現するなら以下のように 必ず expr1=expr2 の形式となる。
-- PL/SQL の IF 構文ではない
IF (expr = comparison_expr1) THEN
statement1
ELSE IF (expr = comparison_expr2) THEN
statement2
ELSE THEN
default_statement
END IF;
IF (expr = comparison_expr1) THEN
statement1
END IF;
IF (expr = comparison_expr2 OR expr = comparison_expr1) THEN
statement2
ELSE THEN
default_statement
END IF;