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

MySQLでパラメータ付きストアドプロシージャを作成する方法(IN・OUTの使い方)

MySQLでは、ストアドプロシージャを作成する際にINOUTという2種類のパラメータを使用できます。INは入力用パラメータ、OUTは出力用パラメータとして機能します。

基本構文

パラメータ付きストアドプロシージャの基本的な構文は以下の通りです。

DELIMITER //
CREATE PROCEDURE yourProcedureName(IN yourParameterName dataType, OUT
yourParameterName dataType
)
BEGIN
yourStatement1;
yourStatement2;
.
.
N
END;
//
DELIMITER ;

ポイントは、まずDELIMITER //で区切り文字を変更してプロシージャ本体を定義し、最後にDELIMITER ;で元の区切り文字に戻すことです。

サンプルテーブルの作成

まず、動作確認用のテーブルを作成します。以下のクエリを実行してください。

mysql> create table SumOfAll
-> (
-> Amount int
-> );
Query OK, 0 rows affected (0.78 sec)

データの挿入

INSERTコマンドを使って、いくつかのレコードをテーブルに挿入します。

mysql> insert into SumOfAll values(100);
Query OK, 1 row affected (0.18 sec)

mysql> insert into SumOfAll values(330);
Query OK, 1 row affected (0.24 sec)

mysql> insert into SumOfAll values(450);
Query OK, 1 row affected (0.10 sec)

mysql> insert into SumOfAll values(400);
Query OK, 1 row affected (0.20 sec)

登録データの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from SumOfAll;

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

+--------+
| Amount |
+--------+
| 100 |
| 330 |
| 450 |
| 400 |
+--------+
4 rows in set (0.00 sec)

値の存在チェックを行うストアドプロシージャの作成

次に、指定した値がテーブル内に存在するかどうかをチェックするストアドプロシージャを作成します。指定した値がテーブルに存在しない場合は、NULLが返される仕組みです。

ストアドプロシージャは以下のように定義します。

mysql> DELIMITER //
mysql> create procedure sp_ChechValue(IN value1 int,OUT value2 int)
-> begin
-> set value2=(select Amount from SumOfAll where Amount=value1);
-> end;
-> //
Query OK, 0 rows affected (0.20 sec)
mysql> delimiter ;

このプロシージャでは、INパラメータ「value1」で検索対象の値を受け取り、SELECT文の結果をOUTパラメータ「value2」に格納しています。

ストアドプロシージャの呼び出しと動作確認

作成したプロシージャを実際の値で呼び出し、出力をセッション変数に保存して確認してみましょう。

ケース1:値が存在しない場合

テーブルに存在しない値「300」を指定してプロシージャを呼び出します。

mysql> call sp_ChechValue(300,@isPresent);
Query OK, 0 rows affected (0.00 sec)

SELECT文でセッション変数「@isPresent」の中身を確認します。

mysql> select @isPresent;

実行結果:

+------------+
| @isPresent |
+------------+
| NULL |
+------------+
1 row in set (0.00 sec)

指定した値がテーブルに存在しないため、NULLが返されていることがわかります。

ケース2:値が存在する場合

今度はテーブルに存在する値「330」を指定してプロシージャを呼び出します。

mysql> call sp_ChechValue(330,@isPresent);
Query OK, 0 rows affected (0.00 sec)

セッション変数「@isPresent」の値を確認しましょう。

mysql> select @isPresent;

実行結果:

+------------+
| @isPresent |
+------------+
| 330 |
+------------+
1 row in set (0.00 sec)

このように、指定した値がテーブルに存在する場合は、その値そのものが出力されます。

まとめ

MySQLのストアドプロシージャでは、INパラメータで入力値を受け取り、OUTパラメータで処理結果を出力できます。セッション変数(@変数名)を組み合わせることで、CALL文の実行結果を手軽に取得できるため、値の存在チェックをはじめ、さまざまな場面で活用できます。

  1. MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法

    MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;

  2. MySQLでAUTO_INCREMENTの開始値を手動で指定してテーブルを作成する方法

    MySQLでAUTO_INCREMENTの開始値を手動で指定してテーブルを作成する方法MySQLでは、テーブル作成時にAUTO_INCREMENTオプションを指定することで、連番の開始値を任意の数値に設定できます。これにより、IDを100や1000など、特定の値から採番することが可能になります。以下の手順で、開始値を100に設定したAUTO_INCREMENTカラムを持つテーブルを作成し、その動作を確認してみましょう。1. テーブルの作成まず、AUTO_INCREMENT=100を指定してテーブルを作成します。mysql> create table DemoTable1907 (