この単元では、ストアドプロシージャやストアドファンクションでも使用できる変数宣言・変数への代入を学びます。
単元概要
重要なポイント
SQL文での変数代入方法を身に付けよう!
解説
変数宣言および代入
他のプログラム言語と同様に「変数」を宣言し、利用することができます。また、ストアドプロシージャだけでなく、ストアドファンクションでも同様に使用できます。
- 変数宣言:declare [変数名] [型] default [初期値];
- 代入 :set [変数名] = [値];
- select文を使った代入:
select [カラム名] into [変数名] from [テーブル名];
※抽出条件を付けて、1件だけにする必要があります。
delimiter //
drop procedure if exists [プロシージャ名];
create procedure [プロシージャ名](in/out [引数名1] [型],in/out [引数名2] [型])
begin
declare [変数名] [型] default [初期値];
set [変数名] = [値];
select [カラム名] into [変数名] from [テーブル名]
where [カラム名] = [条件];
end;
//
delimiter ;
<例題>
- もし、プロシージャ名「pro001_test」がすでにある場合には、削除すること。
- プロシージャ名「pro001_test」で作成すること。
- 引数なし
- 処理
- 処理1:変数名「get_test_su」(int型)初期値:0を宣言すること。
- 処理2:変数名「get_test_su」に「10」を代入すること。
- 処理3:変数名「get_test_su」を表示すること。
delimiter //
drop procedure if exists pro001_test;
create procedure pro001_test()
begin
declare get_test_su int default 0;
set get_test_su = 10;
select get_test_su;
end;
//
delimiter ;
/* ストアドプロシージャを呼び出す */
call pro001_test();
<例題>
- もし、プロシージャ名「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」を表示すること。
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;
select get_test_su;
end;
//
delimiter ;
/* ストアドプロシージャを呼び出す */
call pro001_test(1);
int型にtrue / falseを設定するとどうなる?
MySQLを学んでいくと変数の型に「true / false」を代入することがあります。その際に、どのようなデータが入っているのか?結果をみてみると、「1 or 0」というデータが代入されています。
-- int型にtrueを設定 --
delimiter //
drop procedure if exists pro001_1_test;
create procedure pro001_1_test()
begin
declare get_test_su int default true;
select get_test_su;
end;
//
delimiter ;
/* ストアドプロシージャを呼び出す */
call pro001_1_test();
-- int型にfalseを設定 --
delimiter //
drop procedure if exists pro001_2_test;
create procedure pro001_2_test()
begin
declare get_test_su int default false;
select get_test_su;
end;
//
delimiter ;
/* ストアドプロシージャを呼び出す */
call pro001_2_test();
また、boolean型の場合もどのようなデータが入っているのか?を確認してみよう。
-- boolean型にtrueを設定 --
delimiter //
drop procedure if exists pro001_1_test;
create procedure pro001_1_test()
begin
declare get_test_su boolean default true;
select get_test_su;
end;
//
delimiter ;
/* ストアドプロシージャを呼び出す */
call pro001_1_test();
-- boolean型にfalseを設定 --
delimiter //
drop procedure if exists pro001_2_test;
create procedure pro001_2_test()
begin
declare get_test_su boolean default false;
select get_test_su;
end;
//
delimiter ;
/* ストアドプロシージャを呼び出す */
call pro001_2_test();
結果を見てもらうと同じなのが分かります。MySQLでのtrue/falseは、int型の「1/0」を使用していると思っておくと良いかと思います。
-- trueを入れた場合
+-------------+
| get_test_su |
+-------------+
| 1 |
+-------------+
-- falseを入れた場合
+-------------+
| get_test_su |
+-------------+
| 0 |
+-------------+