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

MySQLストアドプロシージャでユーザー変数を使う方法をわかりやすく解説

MySQLのストアドプロシージャでは、ユーザー変数(ユーザー定義変数)を利用することで、セッション単位で値を保持し、複数のSQL文の間でデータを受け渡すことができます。本記事では、ストアドプロシージャ内でのユーザー変数の基本的な使い方を、実際のコード例とともに解説します。

ユーザー変数とは

MySQLにおけるユーザー変数は、変数名の先頭に「@」(アットマーク)を付けて表現します。たとえば @A@B のような形式がユーザー変数に該当します。ローカル変数(DECLAREで宣言する変数)と異なり、宣言なしでそのまま使用でき、値はセッションが終了するまで保持されます。

ユーザー変数の主な特徴

  • 先頭に「@」を付けて識別する
  • SET文やSELECT文を使って値を代入できる
  • セッション内であれば、プロシージャの外でも参照可能
  • 事前の型宣言が不要(代入時に自動的に型が決まる)

ストアドプロシージャでの使用例

それでは、実際にユーザー変数を使用するストアドプロシージャを作成してみましょう。以下の例では、@A に 100、@B に 500 を代入し、その値と合計値をSELECT文で表示しています。

mysql> DELIMITER // ;
mysql> CREATE PROCEDURE Proc_Uservariables()
    -> BEGIN
    -> SET @A = 100;
    -> SET @B = 500;
    -> SELECT @A, @B, @A + @B;
    -> END //
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ; //

プロシージャを作成したら、CALL文で呼び出して実行します。

mysql> CALL Proc_Uservariables();
+------+------+-------+
| @A   | @B   | @A+@B |
+------+------+-------+
|  100 |  500 |   600 |
+------+------+-------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

実行結果のポイント

実行結果を見ると、@A には 100、@B には 500 が格納され、@A + @B の計算結果として 600 が返されていることがわかります。このように、ユーザー変数は代入した値をそのまま演算に使えるため、柔軟な処理が可能です。

注意点

  • ユーザー変数の値は接続(セッション)ごとに独立しており、他の接続からは参照できません。
  • 大文字・小文字は区別されません(@a@A は同じ変数として扱われます)。
  • 未初期化のユーザー変数を参照すると NULL が返るため、使用前に必ず値を代入しましょう。

まとめ

MySQLのストアドプロシージャでは、「@」を付けた名前でユーザー変数を簡単に扱うことができます。SET文で値を代入し、SELECT文や演算式の中で自由に参照できるため、一時的な値の保持や計算処理に非常に便利です。ただし、スコープがセッション単位である点や、未初期化時にNULLになる点には注意して使用してください。

  1. MySQLのストアドプロシージャ内でSTART TRANSACTIONを実行する方法

    MySQLでは、START TRANSACTIONを実行すると新しいトランザクションが開始され、自動コミット(auto-commit)モードがオフに設定されます。これにより、明示的にCOMMITまたはROLLBACKを実行するまで、データの変更内容は確定されません。以下の例では、START TRANSACTIONを含むストアドプロシージャを作成し、employee.tblテーブルに新しいレコードを挿入します。まず、対象となるテーブルには現在、次のデータが格納されています。mysql> Select * from employee.tbl; +----+---------+ | Id |

  2. MySQLストアドプロシージャ内で別のストアドプロシージャを呼び出す方法

    MySQLのストアドプロシージャは、その内部で別のストアドプロシージャを呼び出すことが可能です。これはCALLステートメントを使用することで実現でき、処理をモジュール化して再利用性を高める上で非常に便利な機能です。ここでは、あるストアドプロシージャが別のストアドプロシージャを呼び出し、last_insert_id()を取得する具体例を見ていきましょう。サンプルテーブルの作成まず、例として使用するテーブルを作成します。以下のテーブルは、自動採番されるIDと名前を持つ従業員テーブルです。mysql> CREATE TABLE employee.tbl(Id INT NOT NULL AUTO