ホームページ > データベース > mysql チュートリアル > mysqlストアドプロシージャループ

mysqlストアドプロシージャループ

PHPz
リリース: 2023-05-12 09:21:37
オリジナル
4650 人が閲覧しました

MySQL ストアド プロシージャのループは、ストアド プロシージャで使用できる非常に重要な言語構造であり、ストアド プロシージャがさまざまな条件に対して特定の操作を実行できるようになります。この記事では、開発者が MySQL ストアド プロシージャ言語をよりよく理解して適用できるように、MySQL ストアド プロシージャのループ構造とその使用シナリオと使用法を紹介します。

1. MySQL ストアド プロシージャのループ構造

MySQL ストアド プロシージャのループ構造には、WHILE ループと FOR ループの 2 種類があります。以下では、その文法構造と使用シナリオを順番に紹介します。

  1. WHILE ループ

WHILE ループは最も基本的なループ構造であり、その構文は次のとおりです。

WHILE condition DO
-- 循环体语句
END WHILE;
ログイン後にコピー

ここで、条件は論理式です。 , if 式が true の場合、ループ本体のステートメントが実行されます。ループ本体文が実行されるたびに、条件の値が再計算され、条件が真でなくなるまでループ本体を飛び出し、END WHILE以降の文が実行されます。

たとえば、次のストアド プロシージャは、WHILE ループを使用して 1 から n までの数値の合計を計算します。

CREATE PROCEDURE sum(n INT)
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE total INT DEFAULT 0;
WHILE i <= n DO
SET total = total + i;
SET i = i + 1;
END WHILE;
SELECT total;
END;
ログイン後にコピー

このうち、変数 i と total は合計値の計算に使用されます。とループの数をそれぞれ指定します。 i <= n の場合、ループ本体ステートメントを実行します:

SET total = total + i;
SET i = i + 1;
ログイン後にコピー

このステートメントが実行されるたびに、i と total の値が再計算されます。i > n になるまで、ループ本体は次のようになります。が飛び出してSELECT文が実行され、合計値を返します。

  1. FOR ループ

FOR ループは WHILE ループよりも簡潔なループ構造であり、その構文は次のとおりです。ループ カウンタの名前。range はループ カウンタの範囲を表します。範囲は次の形式で指定できます。

start_value TO end_value: start_value から開始し、end_value で終了するたびに、ループ カウンタは 1 ずつ増加します。
  • start_value TO end_value BY step: start_value から開始して end_value で終了するたびに、ループ カウンタはステップを増加させます。
  • たとえば、次のストアド プロシージャは FOR ループを使用して 1 から n までの数値の 2 乗を計算します。
FOR var_name [, var_name] ...  IN range DO
-- 循环体语句
END FOR;
ログイン後にコピー

その中で、ループ カウンター i は 1 から n まで進みます。 n, 毎回 1 ずつ増加します。ループ本体ステートメントを実行します:

CREATE PROCEDURE square(n INT)
BEGIN
DECLARE i INT;
DECLARE v INT;
FOR i IN 1 TO n DO
SET v = i * i;
SELECT v;
END FOR;
END;
ログイン後にコピー

このステートメントが実行されるたびに、v の値が再計算されます。i > n になるまで、ループ本体はジャンプされ、 END ステートメントが実行されます。

2. MySQL ストアド プロシージャの循環使用シナリオ

MySQL ストアド プロシージャの循環構造は、次のシナリオでより一般的に使用されます:

データ バッチ処理
  1. MySQL ストアド プロシージャのループ構造を使用すると、データをバッチで処理したり、複数のデータを一度に処理したりして、データ処理の効率とパフォーマンスを向上させることができます。

たとえば、次のストアド プロシージャは、WHILE ループを使用して、製品テーブル内の価格が 100 を超える製品の価格をバッチで 5 ずつ引き下げます。

SET v = i * i;
SELECT v;
ログイン後にコピー

カーソル cur は、次のように定義されています。横断製品 表内で価格が 100 を超えるアイテム。ループを通過するたびにカーソルからデータが取得され、p_price > 100 の場合、製品価格が更新されます。

データ分析と統計
  1. MySQL ストアド プロシージャのループ構造は、平均、中央値、その他の統計指標の計算などのデータ分析と統計に使用できます。

たとえば、次のストアド プロシージャは、WHILE ループを使用して商品の平均価格を計算します。

CREATE PROCEDURE update_price()
BEGIN
DECLARE p_id INT;
DECLARE p_price DECIMAL(10,2);
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT id, price FROM product WHERE price > 100;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
REPEAT
FETCH cur INTO p_id, p_price;
IF NOT done THEN
SET p_price = p_price - 5;
UPDATE product SET price = p_price WHERE id = p_id;
END IF;
UNTIL done END REPEAT;
CLOSE cur;
END;
ログイン後にコピー

その中で、カーソル cur は、product テーブル内の商品の価格を取得するために定義されています。ループ計算を使用して、商品の価格と数量の合計を計算し、最終的に平均価格を返します。

3. MySQL ストアド プロシージャのループ利用時の注意事項

MySQL ストアド プロシージャのループ構造を利用する場合は、次の点に注意する必要があります。 #ループカウンターの初期値と終了値は正しく設定する必要があります。正しく設定しないと、無限ループやデータ欠落が発生する可能性があります。

WHILE ループでは、ループ カウンタの値を手動で更新する必要があります。更新しないとループが継続します。

    WHILE ループを使用する場合、カーソルが最後まで移動した後にストアド プロシージャが無限ループしないように、CONTINUE HANDLER FOR NOT FOUND ステートメントを正しく設定する必要があります。
  1. FOR ループでは、正しいループ カウンタ範囲を使用する必要があります。そうしないと、データが欠落したり重複したりする可能性があります。
  2. 4. 概要
  3. MySQL ストアド プロシージャのループ構造は、データ処理と分析における開発者にとって重要なツールであり、大量のデータを効率的に処理し、計算するために使用できます。インジケーター。ループ構造を使用する場合は、ループ カウンタの初期値と終了値、ループ ステートメントの正確さ、ストアド プロシージャの安定性と正確性を確保するためのカーソルの使用などの問題に注意する必要があります。

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

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