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

MySQLストアドプロシージャにおける「@」記号の使い方|ユーザー定義セッション変数の活用例

MySQLのストアドプロシージャ内で使われる「@」記号は、ユーザー定義のセッション変数(ユーザー変数)を扱うために使用されます。セッション変数に値を格納しておけば、プロシージャの実行後も同じセッション内であればその値を参照できます。

この記事では、実際にテーブルを作成し、ストアドプロシージャの中で「@」変数を使ってレコード数を取得する手順を順番に解説します。

1. サンプルテーブルの作成

まず、学生名を保存するテーブルを作成します。

mysql> create table DemoTable
(
    StudentName varchar(50)
);
Query OK, 0 rows affected (1.30 sec)

2. テーブルへのレコード挿入

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

mysql> insert into DemoTable values('John Smith');
Query OK, 1 row affected (1.00 sec)
mysql> insert into DemoTable values('John Doe');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('Chris Brown');
Query OK, 1 row affected (0.53 sec)

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

mysql> select *from DemoTable;

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

+-------------+
| StudentName |
+-------------+
| John Smith  |
| John Doe    |
| Chris Brown |
+-------------+
3 rows in set (0.00 sec)

3. 「@」変数を使ったストアドプロシージャの作成

次に、DemoTableのレコード数を計算してセッション変数に格納するストアドプロシージャを作成します。ここでは、SELECT文のINTO句を使って、count(*)の結果を「@numberOfRecords」というユーザー定義セッション変数に代入しています。

mysql> DELIMITER //
mysql> create procedure `Demo_Of_@Symbol`()
   BEGIN
   select count(*) into @numberOfRecords from DemoTable;
   END
//
Query OK, 0 rows affected (0.33 sec)
mysql> DELIMITER ;

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

CALLコマンドを使って、作成したストアドプロシージャを実行します。

mysql> call `Demo_Of_@Symbol`();
Query OK, 1 row affected (0.00 sec)

5. セッション変数の値を確認する

プロシージャの実行後、「@」記号で宣言したセッション変数の値を直接SELECT文で参照できます。これが「@」記号の实际的な使い方です。

mysql> select @numberOfRecords;

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

+------------------+
| @numberOfRecords |
+------------------+
|                3 |
+------------------+
1 row in set (0.00 sec)

まとめ

このように、ストアドプロシージャ内で「@」記号を使うことで、処理結果をユーザー定義セッション変数として保持し、プロシージャ実行後にその値を自由に参照することができます。なお、セッション変数の値は接続(セッション)が切断されるとリセットされるため、永続的な保存が必要な場合は通常のテーブルやOUTパラメータの利用を検討しましょう。

  1. MySQLのストアドプロシージャでテーブル全体を取得する方法

    MySQLのストアドプロシージャ内でも、通常のSQLと同じように SELECT * FROM テーブル名 を使うことで、テーブル全体のレコードを取得できます。本記事では、実際にテーブルを作成し、ストアドプロシージャを定義して呼び出すまでの一連の手順を解説します。 1. サンプルテーブルを作成する まずは動作確認用のテーブルを作成しましょう。ここでは学生IDと学生名を持つテーブルを例にします。 mysql> create table DemoTable654 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, Stud

  2. MySQLストアドプロシージャで条件分岐を設定する方法(IF...ELSE構文の使い方)

    MySQLのストアドプロシージャ内で条件分岐を実装したい場合は、IF...ELSE構文を使用します。この構文を使うことで、条件に応じて異なる処理を実行できるようになります。IF...ELSE構文の基本形MySQLにおけるIF...ELSE文の基本的な書式は以下のとおりです。IF yourCondition THEN    yourStatement1;ELSE    yourStatement2;END IF;yourCondition:評価される条件式(例:変数が10より大きいかどうか)yourStatement