この単元では、ストアドプロシージャやストアドファンクションでも使用できる条件分岐(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 ;
<例題>
- もし、プロシージャ名「pro001_test」がすでにある場合には、削除すること。
- プロシージャ名「pro001_test」で作成すること。
- 引数
- in/out:in
- 引数名:int_test_su
- 型:int
- 処理
- 処理1:変数名「get_test_su」(int型)初期値:0を宣言すること。
- 処理2:変数名「get_test_su」に[int_test_su]を代入すること。
- 処理3:
- 分岐処理
- 変数名「get_test_su」が90以上の場合には、「90以上」と表示すること。
- 変数名「get_test_su」が80以上90未満の場合には、「80以上90未満」と表示すること。
- 変数名「get_test_su」がそれ以外の場合には、「それ以外」と表示すること。
- 分岐処理
delimiter //
drop procedure if exists pro001_test;
create procedure pro001_test(in int_test_su int)
begin
declare get_test_su int default 0;
set get_test_su = int_test_su;
if get_test_su >= 90 then
select '90以上';
elseif get_test_su >= 80 and get_test_su < 90 then
select '80以上90未満';
else
select 'それ以外';
end if;
end;
//
delimiter ;
/* ストアドプロシージャを呼び出す */
call pro001_test(85);
<例題>
- もし、プロシージャ名「pro001_test」がすでにある場合には、削除すること。
- プロシージャ名「pro001_test」で作成すること。
- 引数
- in/out:in
- 引数名:int_student_no
- 型:int
- 処理
- 処理1:変数名「get_test_su」(int型)初期値:0を宣言すること。
- 処理2:
- 学生マスタ(student_mst)からデータを取得すること。
- 抽出条件
- 学生NO(student_no)が〈[int_student_no]〉のデータ
- 変数名「get_test_su」にテスト点数(test_su)を代入すること。
- 処理3:
- 分岐処理
- 変数名「get_test_su」が90以上の場合には、「90以上」と表示すること。
- 変数名「get_test_su」が80以上90未満の場合には、「80以上90未満」と表示すること。
- 変数名「get_test_su」がそれ以外の場合には、「それ以外」と表示すること。
- 分岐処理
delimiter //
drop procedure if exists pro001_test;
create procedure pro001_test(in int_student_no int)
begin
declare get_test_su int default 0;
select sm.test_su into get_test_su from student_mst sm
where sm.student_no = int_student_no;
if get_test_su >= 90 then
select '90以上';
elseif get_test_su >= 80 and get_test_su < 90 then
select '80以上90未満';
else
select 'それ以外';
end if;
end;
//
delimiter ;
/* ストアドプロシージャを呼び出す */
call pro001_test(1);