この単元では、ストアドプロシージャの記述の仕方とSQL文をプログラム言語のように使うための基本を学びます。
単元概要
重要なポイント
ストアドプロシージャでプログラミングのような構文が記述できる!
解説
基本構文
MySQLで記述する場合には「delimiter(デリミタ)」を記述します。
ストアドプロシージャを作成する場合、引数を設定することができます。
- in/out
- inは、ストアドプロシージャへ「引数(渡す値)」であることを示します。
- outは、ストアドプロシージャからの「戻り値」であることを示します。
- 引数名
- ストアドプロシージャ内で利用できる値となります。
- 型
- 引数の型を設定できます。(例:int,varcharなど)
delimiter //
create procedure [プロシージャ名](in/out [引数名1] [型],in/out [引数名2] [型])
begin
[処理1]
[処理2]
end;
//
delimiter ;
/* ストアドプロシージャを呼び出す */
call [ストアドプロシージャ名]([引数]);
<例題>
- プロシージャ名「pro001_test」で作成すること。
- 引数
- in/out:in
- 引数名:int_student_no
- 型:int
- 処理
- 処理1
- 学生マスタ(student_mst)からデータを取得すること。
- 抽出条件
- 学生NO(student_no)が〈[int_student_no]〉のデータ
- カラム:すべてのカラムを抽出すること。
- 処理1
delimiter //
create procedure pro001_test(in int_student_no int)
begin
select * from student_mst sm
where sm.student_no = int_student_no;
end;
//
delimiter ;
call pro001_test(1);
削除/作成を一覧の流れにする
ストアドプロシージャを削除する場合には、「drop procedure [プロシージャ名];」で行うことができます。ただ、削除して作成するという流れは、何度も繰り返すため、「if exists」を加え、もし対象となる「プロシージャ名」があれば削除するという記述にすると今後、開発が楽になります。
delimiter //
drop procedure if exists [プロシージャ名];
create procedure [プロシージャ名](in/out [引数名1] [型],in/out [引数名2] [型])
begin
[処理1]
[処理2]
end;
//
delimiter ;
<例題>
- もし、プロシージャ名「pro001_test」がすでにある場合には、削除すること。
- プロシージャ名「pro001_test」で作成すること。
- 引数
- in/out:in
- 引数名:int_student_no
- 型:int
- 処理
- 処理1
- 学生マスタ(student_mst)からデータを取得すること。
- 抽出条件
- 学生NO(student_no)が〈[int_student_no]〉のデータ
- カラム:すべてのカラムを抽出すること。
- 処理1
delimiter //
drop procedure if exists pro001_test; #追加
create procedure pro001_test(in int_student_no int)
begin
select * from student_mst sm
where sm.student_no = int_student_no;
end;
//
delimiter ;
/* ストアドプロシージャを呼び出す */
call pro001_test(1);