MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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パラメータとの使い分けを理解しておくと、より実用的なデータベースプログラミングが可能になります。ぜひ実際の環境でも試してみてください。

  1. MySQLのDELIMITER(区切り文字)を使ってストアドプロシージャを作成・実行する方法

    MySQLでは、CREATE PROCEDUREコマンドを使用することでストアドプロシージャを作成できます。ストアドプロシージャの中には複数のSQL文が含まれますが、そのまま定義すると文の区切りを示すセミコロン(;)がプロシージャ本体の途中で解釈されてしまいます。そこで、一時的に区切り文字を変更する必要があります。 基本的な構文 delimiter // CREATE PROCEDURE yourStoreProcedureName() BEGIN -- ここで変数を宣言します -- クエリ文を記述します END // delimiter ; ストアドプロシージャの作成例 上

  2. MySQLストアドプロシージャのOUTパラメータ:値を出力する方法を解説

    MySQLストアドプロシージャで出力(OUT)パラメータを使用する方法MySQLのストアドプロシージャでは、入力用のINパラメータと、結果を受け取るための出力用のOUTパラメータを定義できます。本記事では、数値の平方根を計算してユーザー変数に結果を返すストアドプロシージャを例に、その作成方法と呼び出し方を解説します。1. ストアドプロシージャの作成以下は、第1引数に入力用(IN)の整数、第2引数に出力用(OUT)の浮動小数点数を受け取るストアドプロシージャの例です。このプロシージャは、入力された整数の平方根を計算し、OUTパラメータに格納します。mysql> delimiter // m