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

MySQLの単一SELECTステートメントでストアドプロシージャ内の2つの変数に値を設定する方法

MySQLのストアドプロシージャでは、SELECT ... INTO構文を使うことで、単一のSELECTステートメントから複数の変数に同時に値を代入できます。本記事では、実際にテーブルを作成し、ストアドプロシージャで2つの変数に一度に値を設定する手順を詳しく解説します。

1. テーブルの作成

まず、動作確認用のテーブルを新規作成します。以下のように、Id・FirstName・LastNameの3つのカラムを持つテーブルを作成しましょう。

mysql> create table useProcedure
   -> (
   -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   -> FirstName varchar(20),
   -> LastName varchar(20)
   -> );
Query OK, 0 rows affected (0.65 sec)

2. テストデータの挿入

次に、INSERTコマンドを使用してテーブルにレコードを挿入します。

mysql> insert into useProcedure(FirstName,LastName) values('Adam','Smith');
Query OK, 1 row affected (0.27 sec)

これで「Adam Smith」という名前のデータが登録されました。

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

ここが本題のポイントです。SELECT FirstName, LastName INTO one, two のように記述することで、1つのSELECT文の実行結果を複数の変数へ同時に格納できます。

以下が、単一のSELECTステートメントで2つの変数を設定するストアドプロシージャの作成例です。

mysql> DELIMITER //
mysql> create procedure Sp_Demo()
   -> BEGIN
   -> declare one varchar(20);
   -> declare two varchar(20);
   -> select FirstName, LastName INTO one, two from useProcedure where id = 1;
   -> select one, two;
   -> END;
   -> //
Query OK, 0 rows affected (0.26 sec)
mysql> DELIMITER ;

このプロシージャの処理内容は以下の通りです。

  • declare文:変数「one」と「two」をvarchar(20)型として宣言します。
  • SELECT ... INTO:id = 1 の行からFirstNameとLastNameの値を取得し、それぞれ変数oneとtwoに同時に代入します。
  • select one, two:変数に格納された値を画面に出力して確認します。

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

作成したストアドプロシージャは、CALLコマンドで呼び出します。

mysql> call Sp_Demo();

5. 実行結果

プロシージャを実行すると、以下のような出力が得られます。

+------+-------+
| one  | two   |
+------+-------+
| Adam | Smith |
+------+-------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)

このように、変数「one」には「Adam」、「two」には「Smith」が正しく格納されていることが確認できました。

まとめ

MySQLのストアドプロシージャ内で複数の変数に値を設定したい場合は、SELECT カラム名1, カラム名2 INTO 変数1, 変数2という形式の単一SELECTステートメントを使用するのが効率的です。個別にSELECT文を複数回実行する必要がないため、コードが簡潔になり、パフォーマンス面でも有利になります。なお、INTO句で指定する変数の数とSELECTするカラムの数は一致させる必要がある点に注意してください。

  1. MySQLのストアドプロシージャを1回呼び出すだけで2つのテーブルに値を挿入する方法

    MySQLでは、ストアドプロシージャを活用することで、1回の呼び出しで複数のテーブルに値を挿入できます。トランザクション処理や関連データの登録など、同じ値を複数テーブルに記録したい場面で非常に便利です。ストアドプロシージャの基本構文2つのテーブルに値を挿入するストアドプロシージャの構文は以下のとおりです。DELIMITER //CREATE PROCEDURE yourProcedureName(anyVariableName int)    BEGIN    insert into yourTableName1(

  2. MySQLストアドプロシージャでDECLAREキーワードを使って変数を作成する方法

    MySQLのストアドプロシージャ内で変数を定義するには、DECLAREキーワードを使用します。基本的な構文は以下のとおりです。DECLARE 変数名 int DEFAULT 初期値;この構文では、変数名の後にデータ型を指定し、必要に応じてDEFAULT句で初期値を設定できます。DEFAULTを省略した場合、変数の初期値はNULLになります。ストアドプロシージャでの変数作成の実例それでは、実際に上記の構文を使って、ストアドプロシージャ内に変数を作成してみましょう。mysql> DELIMITER // mysql> CREATE PROCEDURE variable_Demo() &