MySQLで列の値を返すストアドプロシージャの作成方法
MySQLでは、ストアドプロシージャにOUTパラメータを定義し、SELECT ... INTO構文と組み合わせることで、テーブルの特定の列の値を取得して呼び出し元へ返すことができます。ここでは、IDを渡すと対応するスコア(Score)を返すストアドプロシージャを、実際の手順に沿って解説します。
1. サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。
mysql> create table DemoTable -> ( -> Id int, -> Score int -> ); Query OK, 0 rows affected (0.69 sec)
2. レコードの挿入
続いて、INSERTコマンドを使ってテーブルに複数のレコードを追加します。
mysql> insert into DemoTable values(1,858858686); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(2,9900554); Query OK, 1 row affected (0.22 sec) mysql> insert into DemoTable values(3,646565667); Query OK, 1 row affected (0.15 sec)
3. レコードの確認
SELECT文で、テーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
出力結果
上記のSELECT文を実行すると、次のような結果が得られます。
+------+-----------+ | Id | Score | +------+-----------+ | 1 | 858858686 | | 2 | 9900554 | | 3 | 646565667 | +------+-----------+ 3 rows in set (0.00 sec)
4. ストアドプロシージャの作成
次に、IDを入力パラメータ(IN)として受け取り、該当するScoreの値を出力パラメータ(OUT)に格納して返すストアドプロシージャを作成します。
mysql> DELIMITER // mysql> CREATE PROCEDURE Test_StoredProcedure(in id INT, OUT scoreValue INT) -> BEGIN -> SELECT Score -> INTO scoreValue -> FROM DemoTable tbl -> WHERE tbl.Id = id; -> END -> // Query OK, 0 rows affected (0.18 sec) mysql> DELIMITER ;
このプロシージャでは、WHERE句で指定されたIDに一致するレコードのScore列を検索し、その値をSELECT ... INTOによってOUTパラメータ「scoreValue」に代入しています。
5. ストアドプロシージャの呼び出し
CALLコマンドでストアドプロシージャを実行し、結果を「@result」というユーザー定義変数に格納します。第2引数には、結果を受け取る変数を指定します。
mysql> call Test_StoredProcedure(2,@result); Query OK, 1 row affected (0.00 sec)
6. 結果の確認
最後に、SELECT文で変数の中身を表示します。
mysql> select @result;
出力結果
+---------+ | @result | +---------+ | 9900554 | +---------+ 1 row in set (0.00 sec)
ID=2のレコードに対応するScore「9900554」が正しく返されていることが確認できます。このようにOUTパラメータを活用すれば、ストアドプロシージャから単一の列値を簡単に取得でき、アプリケーション側でのデータ参照にも便利です。
-
MySQLストアドプロシージャでIF-ELSEを実装する方法
MySQLのストアドプロシージャ内で条件分岐を行いたい場合、IF-ELSE構文を使用します。この記事では、基本構文から実際のストアドプロシージャの作成・実行まで、サンプルコード付きでわかりやすく解説します。IF-ELSEの基本構文ストアドプロシージャ内でif-elseを実装するには、以下の構文を使用します。if yourCondition then yourStatement1; else yourStatement2; end if;条件式(yourCondition)が真(TRUE)の場合は最初のステートメントが実行され、偽(FALSE)の場合はelse以降のステートメント
-
MySQLストアドプロシージャでカラムの値を変数に格納する方法
MySQLのストアドプロシージャ内で変数を宣言するには、DECLARE文を使用します。さらにSELECT ~ INTO構文を組み合わせることで、テーブルのカラム値を変数に格納することができます。ここでは、実際にサンプルテーブルを作成し、ストアドプロシージャ経由でカラムの値を変数に取得する手順を解説します。1. サンプルテーブルの作成まず、以下のようにテーブルを作成します。mysql> create table DemoTable2034-> (-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,-> StudentN