MySQLでパラメータ付きストアドプロシージャを作成する方法(IN・OUTの使い方)
MySQLでは、ストアドプロシージャを作成する際にINとOUTという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文の実行結果を手軽に取得できるため、値の存在チェックをはじめ、さまざまな場面で活用できます。
-
MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法
MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;
-
MySQLでAUTO_INCREMENTの開始値を手動で指定してテーブルを作成する方法
MySQLでAUTO_INCREMENTの開始値を手動で指定してテーブルを作成する方法MySQLでは、テーブル作成時にAUTO_INCREMENTオプションを指定することで、連番の開始値を任意の数値に設定できます。これにより、IDを100や1000など、特定の値から採番することが可能になります。以下の手順で、開始値を100に設定したAUTO_INCREMENTカラムを持つテーブルを作成し、その動作を確認してみましょう。1. テーブルの作成まず、AUTO_INCREMENT=100を指定してテーブルを作成します。mysql> create table DemoTable1907 (