ストアドプロシージャから戻り値を受け取る
スポンサードリンク
MySQL のストアドプロシージャから戻り値を受けとる場合、引数に OUT や INOUT の引数を指定します。
OUT の変数は戻り値の受け取ることしかできませんが、 INOUT は戻り値を受け取るだけでなく、呼び出し側から値を渡すこともできます。
OUT で戻り値を受け取る例
まずは OUT で戻り値を受け取る例です。
ストアドプロシージャの作成
DELIMITER // CREATE PROCEDURE testproc1(OUT prmOut INT) BEGIN SET prmOut = 1234; END // DELIMITER ;
ストアドプロシージャを呼び出して受け取った戻り値を表示
CALL testproc1(@var1); /* 引数に戻り値を受け取る変数 @var1 を渡す */ SELECT @var1; /* @var1 にセットされた値を表示 */
実行例
mysql> DELIMITER //
mysql> CREATE PROCEDURE testproc1(OUT prmOut INT)
-> BEGIN
-> SET prmOut = 1234;
-> END
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> CALL testproc1(@var1); /* 引数に戻り値を受け取る変数 @var1 を渡す */
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @var1; /* @var1 にセットされた値を表示 */
+-------+
| @var1 |
+-------+
| 1234 |
+-------+
1 row in set (0.00 sec)
mysql>
INOUT で戻り値を受け取る例
続いて INOUT で戻り値を受け取る例です。INOUT では、戻り値を受け取るだけでなく、引数として値を渡すこともできます。
ストアドプロシージャの作成
DELIMITER // CREATE PROCEDURE testproc2(INOUT prmInOut INT) BEGIN SET prmInOut = prmInOut + 1234; END // DELIMITER ;
ストアドプロシージャに引数を渡して呼び出して、受け取った戻り値を表示
SET @var2 = 1; /* 引数にセットする変数に値をセット */ CALL testproc2(@var2); /* 引数に戻り値を受け取る変数 @var1 を渡す */ SELECT @var2; /* @var1 にセットされた値を表示 */
実行例
mysql> DELIMITER //
mysql> CREATE PROCEDURE testproc2(INOUT prmInOut INT)
-> BEGIN
-> SET prmInOut = prmInOut + 1234;
-> END
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> SET @var2 = 1; /* 引数にセットする変数に値をセット */
Query OK, 0 rows affected (0.00 sec)
mysql> CALL testproc2(@var2); /* 引数に戻り値を受け取る変数 @var1 を渡す */
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @var2; /* @var1 にセットされた値を表示 */
+-------+
| @var2 |
+-------+
| 1235 |
+-------+
1 row in set (0.00 sec)
mysql>
スポンサードリンク