OUTパラメータを使ったMySQLストアドプロシージャの作成方法を徹底解説
はじめに
MySQLのストアドプロシージャでは、INパラメータで値を渡すだけでなく、OUTパラメータを使って処理結果を呼び出し元に返すことができます。本記事では、具体的なサンプルテーブルを使いながら、OUTパラメータを持つストアドプロシージャの作成方法と実行方法をわかりやすく解説します。
サンプルテーブルの準備
説明を理解しやすくするため、次のような「student_info」というテーブルを使用します。このテーブルには、学生のID、名前、住所、履修科目が登録されています。
mysql> Select * from student_info; +------+---------+------------+------------+ | id | Name | Address | Subject | +------+---------+------------+------------+ | 101 | YashPal | Amritsar | History | | 105 | Gaurav | Jaipur | Literature | | 110 | Rahul | Chandigarh | History | | 125 | Raman | Shimla | Computers | +------+---------+------------+------------+ 4 rows in set (0.00 sec)
テーブルには4件のデータが登録されており、「History」が2件、「Literature」が1件、「Computers」が1件となっています。このデータを使って、指定した科目の登録件数をカウントするストアドプロシージャを作成していきましょう。
OUTパラメータ付きストアドプロシージャの作成
次のクエリを実行すると、科目名を引数として渡すとその科目の総数をOUTパラメータに格納して返すストアドプロシージャを作成できます。
mysql> DELIMITER // ;
mysql> Create Procedure subjects (IN S_Subject VARCHAR(25), OUT total INT)
-> BEGIN
-> SELECT count(subject)
-> INTO total
-> FROM student_info
-> WHERE subject = S_subject;
-> END //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
プロシージャの構造を解説
- S_Subject(INパラメータ):カウントしたい科目名を受け取る入力用パラメータです。
- total(OUTパラメータ):該当する科目の件数を格納して呼び出し元へ返す出力用パラメータです。
- SELECT ... INTO構文により、COUNT関数の結果を直接変数「total」に代入しています。
- DELIMITERの変更は、ストアドプロシージャ内の複数ステートメントを正しく定義するために必要です。作成後は通常のデリミタに戻します。
ストアドプロシージャの実行方法
作成したプロシージャは、CALL文とユーザー定義変数「@total」を使って実行します。OUTパラメータの結果はこの変数に格納され、後からSELECT文で確認できます。
mysql> CALL subjects('Computers', @total);
Query OK, 1 row affected (0.02 sec)
mysql> Select @total;
+--------+
| @total |
+--------+
| 1 |
+--------+
1 row in set (0.01 sec)
上記の例では「Computers」を指定しているため、結果は1件となります。続いて「History」を指定して実行してみましょう。
mysql> CALL subjects('History', @total);
Query OK, 1 row affected (0.00 sec)
mysql> Select @total;
+--------+
| @total |
+--------+
| 2 |
+--------+
1 row in set (0.00 sec)
今度は「History」が2件登録されているため、結果は2件として返されました。このように、同じプロシージャを再利用しながら、異なる条件ごとの集計結果を柔軟に取得できます。
まとめ
OUTパラメータを活用することで、ストアドプロシージャの処理結果を変数経由でアプリケーション側や後続のSQLに渡せるようになります。INパラメータとの使い分けを理解しておくと、より実用的なデータベースプログラミングが可能になります。ぜひ実際の環境でも試してみてください。
-
MySQLのDELIMITER(区切り文字)を使ってストアドプロシージャを作成・実行する方法
MySQLでは、CREATE PROCEDUREコマンドを使用することでストアドプロシージャを作成できます。ストアドプロシージャの中には複数のSQL文が含まれますが、そのまま定義すると文の区切りを示すセミコロン(;)がプロシージャ本体の途中で解釈されてしまいます。そこで、一時的に区切り文字を変更する必要があります。 基本的な構文 delimiter // CREATE PROCEDURE yourStoreProcedureName() BEGIN -- ここで変数を宣言します -- クエリ文を記述します END // delimiter ; ストアドプロシージャの作成例 上
-
MySQLストアドプロシージャのOUTパラメータ:値を出力する方法を解説
MySQLストアドプロシージャで出力(OUT)パラメータを使用する方法MySQLのストアドプロシージャでは、入力用のINパラメータと、結果を受け取るための出力用のOUTパラメータを定義できます。本記事では、数値の平方根を計算してユーザー変数に結果を返すストアドプロシージャを例に、その作成方法と呼び出し方を解説します。1. ストアドプロシージャの作成以下は、第1引数に入力用(IN)の整数、第2引数に出力用(OUT)の浮動小数点数を受け取るストアドプロシージャの例です。このプロシージャは、入力された整数の平方根を計算し、OUTパラメータに格納します。mysql> delimiter // m