[Sy] 【技術メモ】MySQLのストアドプロシージャで引数を扱う
2014/04/22
前回は簡単な ストアドプロシージャ を作ってみました。
⇒ [Sy] 【技術メモ】MySQLで初めてストアドプロシージャを作ってみた今回は、プログラムのように引数を渡して処理させるパターンを試してみます。
使用するテーブル
以下の様なテーブルを使っていきます。
mysql> select * from member;
+----+-----------+
| id | name |
+----+-----------+
| 1 | utano |
| 2 | kobayashi |
+----+-----------+
2 rows in set (0.00 sec)
引数を渡せるストアドプロシージャを作る
ストアドプロシージャには、入力用/出力用の引数という2つのパターンがあります。
厳密にはちょっと違いますが、簡単に言っちゃうと
- 入力用:値を渡すタイプの引数
- 出力用:参照を渡すタイプの引数
って感じですかね。出力用だと、プロシージャ内で引数に値をセットし、プロシージャ外で呼び出して使うってことができます。
ここで扱うのは、入力用の引数です。
引数で渡したidを持つレコードを検索するストアドプロシージャはこうなります。
mysql> create procedure get_member(in x int)
-> select * from member where id = x;
Query OK, 0 rows affected (0.01 sec)
(in x int)
の部分が引数の宣言になりますが、xというint型の入力用(in)引数 の宣言を意味します。
では、登録したストアドプロシージャを実行してみます。まずはid=1
で検索。
mysql> call get_member(1);
+----+-------+
| id | name |
+----+-------+
| 1 | utano |
+----+-------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
ちゃんと検索できました。次にid=2
で検索。
mysql> call get_member(2);
+----+-----------+
| id | name |
+----+-----------+
| 2 | kobayashi |
+----+-----------+
1 row in set (0.00 sec)
引数に応じて結果が変わることがわかるかと思います。