Syntax Error.

[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)

引数に応じて結果が変わることがわかるかと思います。

関連記事

⇒ [Sy] 【技術メモ】MySQLのストアドプロシージャを使ってinsertとかdeleteとかをループさせて実行