単元概要

この単元では、ストアドプロシージャやストアドファンクションでも使用できる条件分岐(if文)を学びます。

重要なポイント

SQL文の中でIFを利用した分岐処理を学ぶ!

解説

if文の使い方

他のプログラム言語と同様に「if文」を利用することができます。また、ストアドプロシージャだけでなく、ストアドファンクションでも同様に使用できます

delimiter //

drop procedure if exists [プロシージャ名];
create procedure [プロシージャ名](in/out [引数名1] [型],in/out [引数名2] [型])
begin
    declare [変数名] [型] default [初期値];
    set [変数名] = [値];
    
    if [変数名] >= 90 then
        select '90以上';
    elseif [変数名] >= 80 and [変数名] < 90 then
        select '80以上90未満';
    else
        select 'それ以外';
    end if;
end;
//

delimiter ;

<例題>

  • もし、プロシージャ名「pro008_test」がすでにある場合には、削除すること。
  • プロシージャ名「pro008_test」で作成すること。
  • 引数
    • in/out:in
    • 引数名:int_test_score
    • 型:int
  • 処理
    1. 処理1:変数名「get_test_score」(int型)初期値:0を宣言すること。
    2. 処理2:変数名「get_test_score」に[int_test_score]を代入すること。
    3. 処理3:
      1. 分岐処理
        • 変数名「get_test_score」が90以上の場合には、「90以上」と表示すること。
        • 変数名「get_test_score」が80以上90未満の場合には、「80以上90未満」と表示すること。
        • 変数名「get_test_score」がそれ以外の場合には、「それ以外」と表示すること。
delimiter //

drop procedure if exists pro008_test;
create procedure pro008_test(in int_test_score int)
begin
    declare get_test_score int default 0;
    set get_test_score = int_test_score;

    if get_test_score >= 90 then
        select '90以上';
    elseif get_test_score >= 80 and get_test_score < 90 then
        select '80以上90未満';
    else
        select 'それ以外';
    end if;
end;
//

delimiter ;

/* ストアドプロシージャを呼び出す */
call pro008_test(85);

<例題>

  • もし、プロシージャ名「pro009_test」がすでにある場合には、削除すること。
  • プロシージャ名「pro009_test」で作成すること。
  • 引数
    • in/out:in
    • 引数名:int_std_id
    • 型:int
  • 処理
    1. 処理1:変数名「get_test_score」(int型)初期値:0を宣言すること。
    2. 処理2:
      1. 学生マスタ(students_mst)からデータを取得すること。
      2. 抽出条件
        • 学生ID(student_id)が〈[int_std_id]〉のデータ
      3. 変数名「get_test_score」にテスト点数(test_score)を代入すること。
    3. 処理3:
      1.  分岐処理
        • 変数名「get_test_score」が90以上の場合には、「90以上」と表示すること。
        • 変数名「get_test_score」が80以上90未満の場合には、「80以上90未満」と表示すること。
        • 変数名「get_test_score」がそれ以外の場合には、「それ以外」と表示すること。
delimiter //

drop procedure if exists pro009_test;
create procedure pro009_test(in int_std_id int)
begin
    declare get_test_score int default 0;
    select sm.test_score into get_test_score from students_mst sm
     where sm.student_id = int_std_id;

    if get_test_score >= 90 then
        select '90以上';
    elseif get_test_score >= 80 and get_test_score < 90 then
        select '80以上90未満';
    else
        select 'それ以外';
    end if;
end;
//

delimiter ;

/* ストアドプロシージャを呼び出す */
call pro009_test(1);