mysql ストアド プロシージャのループ ステートメントとは何ですか?

青灯夜游
リリース: 2022-06-20 11:51:29
オリジナル
10362 人が閲覧しました

mysql ストアド プロシージャには 3 種類のループ ステートメントがあります: 1. WHILE ループ ステートメント、構文「WHILE 条件式 DO ループ ステートメント END WHILE」; 2. REPEAT ループ ステートメント、構文「REPEAT ループ ステートメント UNTIL 条件式」 END REPEAT"; 3. LOOP ループ ステートメント、構文 "[begin_label:] LOOP 条件とループ ステートメントのリスト END LOOP [end_label]"。

mysql ストアド プロシージャのループ ステートメントとは何ですか?

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

MySQL には、条件に基づいて SQL コードのセクションを繰り返し実行できるループ ステートメントが用意されています。 MySQL には、WHILE、REPEAT、LOOP の 3 種類のループ ステートメントがあります。

WHILE ループ

WHILE ステートメントの構文は次のとおりです。

WHILE expression DO
   statements
END WHILE
ログイン後にコピー

WHILE ループ チェック expression の各反復の開始。 expressionTRUE と評価された場合、MySQL は statements の評価の間に WHILE を実行し、# # まで END WHILE を実行します。 #expressionFALSE になるまで評価されます。 WHILE ループは、statements が実行される前に式をチェックするため、事前テスト ループと呼ばれます。

次のフローチャートは、WHILE ループ ステートメントを示しています。

mysql ストアド プロシージャのループ ステートメントとは何ですか?

次は、ストアド プロシージャでの WHILE ループ ステートメントの使用例です。
DELIMITER $$
DROP PROCEDURE IF EXISTS test_mysql_while_loop$$ 
CREATE PROCEDURE test_mysql_while_loop ( ) 
	BEGIN
	DECLARE x INT;
	DECLARE str VARCHAR ( 255 );
	SET x = 1;
	SET str = '';
	WHILE x <= 5 DO
		SET str = CONCAT( str, x, &#39;,&#39; );
		SET x = x + 1;
	END WHILE;
	SELECT str;
END $$
DELIMITER ;
ログイン後にコピー

上記のストアド プロシージャ test_mysql_while_loop では:

    まず、x 変数の値が 5 より大きくなるまで、文字列 str を繰り返し構築します。
  • 次に、SELECT ステートメントを使用して最終的な文字列を表示します。
  • x 変数を初期化しない場合、デフォルト値は NULL になることに注意してください。したがって、WHILE ループ ステートメントの条件は常に TRUE となり、望ましくない無限ループが発生します。

test_mysql_while_loop ストアド プロシージャをテストしてみましょう:

CALL test_mysql_while_loop();
ログイン後にコピー

出力結果:


mysql ストアド プロシージャのループ ステートメントとは何ですか?

##REPEAT ループ

REPEAT ループ ステートメントの構文は次のとおりです。

REPEAT
 statements
UNTIL expression
END REPEAT
ログイン後にコピー

まず、MySQL は

statements

を実行し、次に

expression# を評価します。 ##。 expressionFALSE と評価される場合、MySQL statementsexpression が TRUE と評価されるまで繰り返し実行されます。 REPEAT ループ ステートメント expression は実行後に

statements

をチェックするため、REPEAT ループ ステートメントはポストテスト ループとも呼ばれます。 次のフローチャートは、REPEAT ループ ステートメントを示しています。

test_mysql_while_loop は、WHILE ループ ステートメントを使用して、REPEAT ループ ステートメントを使用して上記のストアド プロシージャを書き換えることができます。 :

DELIMITER $$
DROP PROCEDURE IF EXISTS mysql_test_repeat_loop $$ 
CREATE PROCEDURE mysql_test_repeat_loop ( ) BEGIN
	DECLARE x INT;
	DECLARE str VARCHAR ( 255 );
	SET x = 1;
	SET str = &#39;&#39;;
	REPEAT
		SET str = CONCAT( str, x, &#39;,&#39; );
		SET x = x + 1;
	UNTIL x > 5 
	END REPEAT;
	SELECT str;
END $$
DELIMITER ;
ログイン後にコピー
mysql ストアド プロシージャのループ ステートメントとは何ですか?UNTIL 式にはセミコロン (;) がないことに注意してください。

CALL mysql_test_repeat_loop();
ログイン後にコピー

出力結果:

LOOP、LEAVE、および ITERATE ステートメント mysql ストアド プロシージャのループ ステートメントとは何ですか?

はい2 つのステートメントを使用してループを制御できます。

LEAVE ステートメントを使用すると、条件の確認を待たずにループをすぐに終了できます。 LEAVE ステートメントは、PHP、C/C、Java などの他の言語の Break ステートメントと同様に機能します。

  • ITERATE ステートメントを使用すると、その下のコード全体をスキップして、新しい反復を開始できます。 ITERATE ステートメントは、PHP、C/C、Java の continue ステートメントに似ています。

  • MySQL では、コード ブロックを繰り返し実行する LOOP ステートメントも提供しており、ループ ラベルを使用することで柔軟性が高まります。

    次は LOOP ループ ステートメントの使用例です:
  • DELIMITER $$
    DROP PROCEDURE IF EXISTS test_mysql_loop $$ 
    CREATE PROCEDURE test_mysql_loop() 
    BEGIN
      DECLARE x INT;
      DECLARE str VARCHAR ( 255 );
      SET x = 1;
      SET str = &#39;&#39;;
      loop_label :LOOP
        IF x > 10 THEN
          LEAVE loop_label;
        END IF;
        SET x = x + 1;
        IF ( x MOD 2 ) THEN
          ITERATE loop_label;
        ELSE 
          SET str = CONCAT( str, x, &#39;,&#39; );
        END IF;
      END LOOP;
      SELECT str;
    END $$
    DELIMITER ;
    ログイン後にコピー
テストしてください:

call test_mysql_loop();
ログイン後にコピー


この例では,

mysql ストアド プロシージャのループ ステートメントとは何ですか?

ストアド プロシージャは、2、4、6 などの偶数の文字列のみを構築します。

  • loop ステートメントの前に、loop_label ループラベルを配置します。

  • 値 x が 10 より大きい場合、LEAVE ステートメントによりループは終了します。

  • x の値が奇数の場合、ITERATE ステートメントはそれ以下のものをすべて無視し、新しい反復を開始します。

  • x の値が偶数の場合、ELSE ステートメントのブロックは偶数の文字列を構築します。

  • [関連する推奨事項:

    mysql ビデオ チュートリアル

    ]

以上がmysql ストアド プロシージャのループ ステートメントとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート