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

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

MySQLストアドプロシージャで出力(OUT)パラメータを使用する方法

MySQLのストアドプロシージャでは、入力用のINパラメータと、結果を受け取るための出力用のOUTパラメータを定義できます。本記事では、数値の平方根を計算してユーザー変数に結果を返すストアドプロシージャを例に、その作成方法と呼び出し方を解説します。

1. ストアドプロシージャの作成

以下は、第1引数に入力用(IN)の整数、第2引数に出力用(OUT)の浮動小数点数を受け取るストアドプロシージャの例です。このプロシージャは、入力された整数の平方根を計算し、OUTパラメータに格納します。

mysql> delimiter //
mysql> create procedure Sp_SQRT(IN Number1 INT, OUT Number2 FLOAT)
   -> Begin
   -> set Number2=sqrt(Number1);
   -> end;
   -> //
Query OK, 0 rows affected (0.24 sec)
mysql> delimiter ;

ポイント: プロシージャ本体の中で;が文の区切りとして使われるため、まずdelimiter //でデリミタを変更しています。作成後はdelimiter ;で元に戻すのを忘れないようにしましょう。

2. ストアドプロシージャの呼び出し

作成したストアドプロシージャを呼び出し、OUTパラメータの結果をユーザー変数に受け取ります。構文は以下の通りです。

CALL yourStoredProcedureName(anyIntegerValue,@anyVariableName);

実際に「Sp_SQRT」という名前のストアドプロシージャを作成したので、36を渡して呼び出してみます。

mysql> call Sp_SQRT(36,@MySquareRootNumber);
Query OK, 0 rows affected (0.02 sec)

3. 出力結果の確認

SELECT文を使って、変数@MySquareRootNumberに格納された値を確認できます。構文は以下の通りです。

SELECT @anyVariableName;

実際に実行してみましょう。

mysql> select @MySquareRootNumber;

実行結果は以下のようになります。36の平方根である「6」が正しく返されていることがわかります。

+---------------------+
| @MySquareRootNumber |
+---------------------+
|                   6 |
+---------------------+
1 row in set (0.00 sec)

まとめ

このように、MySQLのストアドプロシージャではINパラメータで値を受け取り、OUTパラメータで処理結果を呼び出し元に返すことができます。呼び出し時に@から始まるユーザー変数を指定することで、複数の結果を一度に取得したり、アプリケーション側で柔軟に結果を扱ったりすることが可能になります。計算処理やデータ集計などをデータベース側に任せたい場合に、ぜひ活用してみてください。

  1. MySQLストアドプロシージャで数学演算を実行する方法

    MySQLのストアドプロシージャで計算処理を行うMySQLのストアドプロシージャを利用すると、金額×数量のような数学演算をまとめて定義し、必要なときに簡単に呼び出して実行できます。ここでは、引数として受け取った「amount(金額)」と「quantity(数量)」を掛け合わせて合計を求めるプロシージャを作成する手順を紹介します。ストアドプロシージャの作成まず、delimiter を変更してプロシージャ本体を定義します。以下の例では、amount と quantity の2つの INT 型引数を受け取り、その積を「Total」として表示します。mysql> delimiter // mys

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

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