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

MySQLストアドプロシージャから戻り値を返す方法

MySQLのストアドプロシージャから値を返したい場合、ユーザー定義のセッション変数を使用する必要があります。セッション変数を定義するには、変数名の先頭に「@」記号(アットマーク)を付けます。

セッション変数の基本構文

例えば、validoという変数に値を格納して参照する場合は、以下のように「@」を付けて記述します。

SELECT @valido;

SELECT文でセッション変数を使う場合も同様に、任意の変数名の前に「@」を付けます。基本構文は次のとおりです。

SELECT @anyVariableName;

戻り値を返すストアドプロシージャの作成例

ここでは、実際にストアドプロシージャから値を返すデモを行います。まず、ストアドプロシージャを作成するクエリは以下のとおりです。

mysql> DELIMITER //
mysql> create procedure ReturnValueFrom_StoredProcedure
-> (
-> In num1 int,
-> In num2 int,
-> out valido int
-> )
-> Begin
-> IF (num1 > 4 AND num2 > 5) THEN
-> SET valido = (num1 + num2);
-> ELSE
-> SET valido = (num1 - num2);
-> END IF;
-> end //
Query OK, 0 rows affected (0.32 sec)
mysql> DELIMITER ;

このプロシージャでは、引数として受け取った2つの整数 num1num2 を判定し、条件によって加算または減算した結果をOUTパラメータの valido に格納します。

CALLコマンドでプロシージャを呼び出す

作成したストアドプロシージャは、CALLコマンドを使って呼び出します。呼び出し時には、結果を受け取るためのセッション変数を引数として渡します。

mysql> call ReturnValueFrom_StoredProcedure(10,6,@TotalSum);
Query OK, 0 rows affected (0.01 sec)

SELECT文で結果を確認する

プロシージャ実行後、SELECT文でセッション変数の中身を確認します。

mysql> select @TotalSum;

実行結果は以下のとおりです。

+-----------+
| @TotalSum |
+-----------+
| 16 |
+-----------+
1 row in set (0.00 sec)

10 + 6 = 16 が正しく返されていることがわかります。

減算パターンの実行例

続いて、条件を満たさないケースとして、2つの値の差分を求める呼び出しを行います。

mysql> call ReturnValueFrom_StoredProcedure(4,2,@TotalDiff);
Query OK, 0 rows affected (0.01 sec)

この場合、num1 = 4 は条件「4より大きい」を満たさないため、ELSE側の減算処理が実行されます。SELECT文で結果を確認してみましょう。

mysql> select @TotalDiff;

実行結果は以下のとおりです。

+------------+
| @TotalDiff |
+------------+
| 2 |
+------------+
1 row in set (0.00 sec)

まとめ

MySQLのストアドプロシージャから値を受け取るには、OUTパラメータと組み合わせて「@」付きのユーザー定義セッション変数を使用します。CALLコマンド実行時にセッション変数を渡し、その後にSELECT文で参照することで、プロシージャ内で計算された結果を取得できます。この手法は、関数のように単一の戻り値を返す代わりに、柔軟に複数の値を扱いたい場合にも応用できます。

  1. MySQLストアドプロシージャでテーブルにデータを挿入する方法

    MySQLのストアドプロシージャを使ってテーブルにデータを挿入するには、以下のような構文を使用します。create procedure yourProcedureName(OptionalParameter) begin insert into yourTableName() values(yourValue1,yourValue2,...N); endサンプルテーブルの作成まずは、この構文を実際に理解するために、テスト用のテーブルを作成してみましょう。mysql> create table DemoTable1928 ( Id int NOT NULL

  2. MySQLストアドプロシージャでカラムの値を変数に格納する方法

    MySQLのストアドプロシージャ内で変数を宣言するには、DECLARE文を使用します。さらにSELECT ~ INTO構文を組み合わせることで、テーブルのカラム値を変数に格納することができます。ここでは、実際にサンプルテーブルを作成し、ストアドプロシージャ経由でカラムの値を変数に取得する手順を解説します。1. サンプルテーブルの作成まず、以下のようにテーブルを作成します。mysql> create table DemoTable2034-> (-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,-> StudentN