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

MySQLのLOOPステートメントをストアドプロシージャで活用する方法

MySQLには、コードブロックを繰り返し実行するためのLOOPステートメントが用意されています。さらに、ループラベルを使用できる柔軟性も備わっています。

ループの流れを制御するために、以下の2つのステートメントが利用できます。

LEAVEステートメント

条件判定を待たずに、ループから即座に抜け出す(終了する)ためのステートメントです。

ITERATEステートメント

それ以降のコード処理をスキップし、次の反復(イテレーション)を新たに開始するためのステートメントです。

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

ここでは、LOOPステートメントとストアドプロシージャを組み合わせた実際の使用例を紹介します。以下のストアドプロシージャは、2, 4, 6, 8のような偶数をつなげた文字列を構築するものです。

mysql> Delimiter //
mysql> CREATE PROCEDURE LOOP_loop()
    -> BEGIN
    -> DECLARE A INT;
    -> DECLARE XYZ VARCHAR(255);
    -> SET A = 1;
    -> SET XYZ = '';
    -> loop_label: LOOP
    -> IF A > 10 THEN
    -> LEAVE loop_label;
    -> END IF;
    -> SET A = A + 1;
    -> IF (A mod 2) THEN
    -> ITERATE loop_label;
    -> ELSE
    -> SET XYZ = CONCAT(XYZ,A,',');
    -> END IF;
    -> END LOOP;
    -> SELECT XYZ;
    -> END //
Query OK, 0 rows affected (0.07 sec)

このプロシージャを呼び出すと、以下のような結果が得られます。

mysql> DELIMITER ;
mysql> CALL LOOP_loop ();
+-------------+
| XYZ         |
+-------------+
| 2,4,6,8,10, |
+-------------+
1 row in set (0.04 sec)
Query OK, 0 rows affected (0.04 sec)

動作の仕組み

上記のクエリの処理内容を整理すると、次のようになります。

  • A の値が 10 より大きい場合:LEAVEステートメントによってループが終了します。
  • A の値が奇数の場合:ITERATEステートメントが以降の処理をすべてスキップし、新しい反復を開始します。
  • A の値が偶数の場合:ELSEブロック内の処理が実行され、CONCAT関数によって偶数が文字列XYZに追加されていきます。

このように、LOOPステートメントとLEAVE・ITERATEを組み合わせることで、条件に応じた柔軟な繰り返し処理をストアドプロシージャ内で実現できます。

  1. MySQLのストアドプロシージャでループ処理を行う方法【REPEAT文の使い方】

    MySQLストアドプロシージャでのループ処理の基本 MySQLのストアドプロシージャ内で繰り返し処理を実行したい場合は、REPEAT文を使用します。REPEAT文は「後判定ループ」と呼ばれる形式で、条件の判定を処理の最後に行うため、最低でも1回は必ず実行されるのが特徴です。 ここでは、1から指定した値までの数値を順番に出力するサンプルプロシージャを作成し、その動きを確認していきます。 ストアドプロシージャの作成手順 まず、DELIMITERコマンドで区切り文字を変更してから、プロシージャを定義します。 mysql> DELIMITER // mysql> CREATE PROCE

  2. MySQLでSELECTステートメントを使ってストアドプロシージャを呼び出す方法

    MySQLでは、FROM句の中でストアドプロシージャを直接指定してSELECTすることはできません。代わりにCALLコマンドを使ってプロシージャを呼び出し、その後でSELECTステートメントを実行して結果を確認する流れになります。この記事では、実際にテーブルとストアドプロシージャを作成し、CALLで呼び出してからSELECTでデータを取得するまでの手順を順番に解説します。1. サンプルテーブルを作成するまずはデータを格納するためのテーブルを作成しましょう。以下の例では、顧客ID・顧客名・出荷日時を持つテーブルを定義しています。mysql> create table DemoTable2