CASE ステートメント Oracle PL/SQLと例
⚡ スマートサマリー
PL/SQLのCASE文は、セレクタに基づいて複数の選択肢の中から1つを選択します。IF-THEN-ELSIF文に似ていますが、より分かりやすいです。単純なCASE文はセレクタの値に一致するのに対し、検索型CASE文は各WHEN句の条件を評価し、最初に真となった条件を実行します。

CASEステートメントとは何ですか?
CASE文はIF-THEN-ELSIF文に似ており、条件に基づいて利用可能な選択肢の中から1つの選択肢を選びます。
- CASE文は、ブール式ではなく「セレクタ」を使用して処理順序を選択します。
- CASE文の式の値はセレクタとして扱われます。
- その式は、どのような型(算術式、変数など)でも構いません。
- 各選択肢にはあらかじめ定義された値(セレクタ)が割り当てられ、セレクタの値が条件式の値と一致する選択肢が実行されます。
- IF-THEN-ELSIF とは異なり、CASE ステートメントは SQL ステートメントでも使用できます。
- CASE文のELSEブロックには、いずれの選択肢も選ばれなかった場合に実行される処理シーケンスが格納されます。
構文
CASE (expression) WHEN <value1> THEN action_block1; WHEN <value2> THEN action_block2; WHEN <value3> THEN action_block3; ELSE action_block_default; END CASE;
- 上記の構文では、式は任意の型の値を返す可能性があります。
- 各「WHEN」条項は、そして。
- 式に一致する値を持つ「WHEN」句が選択され、その実行されます。
- 「ELSE」ブロックはオプションで、代替案が見つからない場合に実行する。
- 「END」はCASE文の終わりを示し、CASE文の必須要素です。
例1:CASE文を用いた算術計算
この例では、55と5という2つの数値の間で算術計算を行います。
DECLARE a NUMBER := 55; b NUMBER := 5; arth_operation VARCHAR2(20) := 'MULTIPLY'; BEGIN dbms_output.put_line('Program started.'); CASE (arth_operation) WHEN 'ADD' THEN dbms_output.put_line('Addition of the numbers are: '|| a+b ); WHEN 'SUBTRACT' THEN dbms_output.put_line('Subtraction of the numbers are: '||a-b ); WHEN 'MULTIPLY' THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b ); WHEN 'DIVIDE' THEN dbms_output.put_line('Division of the numbers are:'|| a/b); ELSE dbms_output.put_line('No operation action defined. Invalid operation'); END CASE; dbms_output.put_line('Program completed.'); END; /
Code 説明
- Code 2行目: 変数「a」を「NUMBER」として宣言し、値「55」で初期化します。
- Code 3行目:変数「b」を「NUMBER」として宣言し、値「5」で初期化します。
- Code 4行目: 変数「arth_operation」をサイズ20の「VARCHAR2」として宣言し、値「MULTIPLY」で初期化します。
- Code 6行目:「プログラムが開始されました」という文を出力します。
- Code 7行目:CASE文は式の値をチェックします。ここでは、「arth_operation」の値は「MULTIPLY」であり、これがセレクタとして扱われます。
- Code 10行目: 値が「MULTIPLY」のWHEN句がセレクタに一致するため、コントローラはこのアクションブロックを選択し、「数値の乗算結果は: 275」と出力します。
- Code 13行目:CASE文の終わりを示します。
- Code 14行目:「プログラムが完了しました」という文を出力します。
Code 出力
Program started. Multiplication of the numbers are: 275 Program completed.
SEARCHED CASE ステートメント
検索対象のCASE文は、通常のCASE文と似ていますが、セレクタを使用して代替案を選択するのではなく、WHEN句で条件が直接定義されています。
- 条件を満たす最初のWHEN句が実行され、コントローラは残りの選択肢をスキップします。
構文
CASE WHEN <expression1> THEN action_block1; WHEN <expression2> THEN action_block2; WHEN <expression3> THEN action_block3; ELSE action_block_default; END CASE;
- 上記の構文では、各 WHEN 句は別個のそして。
- 式がTRUEを返すWHEN句が実行されます。
- 「ELSE」ブロックはオプションで、いずれの選択肢も満たされない場合に実行する。
- 「END」はCASE文の終わりを示し、CASE文の必須要素です。
例1:検索されたケースを使用した算術計算
この例では、55と5という2つの数値の間で算術計算を行います。
DECLARE a NUMBER := 55; b NUMBER := 5; arth_operation VARCHAR2(20) := 'DIVIDE'; BEGIN dbms_output.put_line('Program started.'); CASE WHEN arth_operation = 'ADD' THEN dbms_output.put_line('Addition of the numbers are: '||a+b ); WHEN arth_operation = 'SUBTRACT' THEN dbms_output.put_line('Subtraction of the numbers are: '|| a-b); WHEN arth_operation = 'MULTIPLY' THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b ); WHEN arth_operation = 'DIVIDE' THEN dbms_output.put_line('Division of the numbers are: '|| a/b ); ELSE dbms_output.put_line('No operation action defined. Invalid operation'); END CASE; dbms_output.put_line('Program completed.'); END; /
Code 説明
- Code 2行目: 変数「a」を「NUMBER」として宣言し、値「55」で初期化します。
- Code 3行目:変数「b」を「NUMBER」として宣言し、値「5」で初期化します。
- Code 4行目: 変数「arth_operation」をサイズ20の「VARCHAR2」として宣言し、値「DIVIDE」で初期化します。
- Code 6行目:「プログラムが開始されました」という文を出力します。
- Code 7行目:検索対象のCASE文が始まります。ADD、SUBの句TRACT と MULTIPLY は、条件が 'arth_operation' の値と一致しないためスキップされます。
- Code 14行目: WHEN句の式「arth_operation = 'DIVIDE'」が満たされ、TRUEが返されます。
- Code 15行目:WHEN句のアクションブロックが実行され、「数値の割り算は:11」と表示されます。
- Code 17行目:CASE文の終わりを示します。
- Code 18行目:「プログラムが完了しました」という文を出力します。
Code 出力
Program started. Division of the numbers are: 11 Program completed.
事例と検索事例の比較
どちらの形式も1つの枝を選択するが、枝の選択方法が異なり、以下にその概要を示す。
| タイプ | 詳細説明 | 使用法 |
|---|---|---|
| HOUSES | に似て イフ・ザ・エルシフ ステートメント。ブール式の代わりに「セレクタ」を使用して選択肢を選択します。 | セレクターを使用して複数の選択肢から選択するために使用されます。 |
| 検索されたケース | 実際のセレクタを持たないCASE文。代わりに、選択肢を選択する条件(TRUEまたはFALSEに評価される)が含まれています。 | 主に射程距離などの条件に基づいて、2つ以上の選択肢から選ぶ場合に使用される。 |
