MySQL ストアド プロシージャのループは、ストアド プロシージャで使用できる非常に重要な言語構造であり、ストアド プロシージャがさまざまな条件に対して特定の操作を実行できるようになります。この記事では、開発者が MySQL ストアド プロシージャ言語をよりよく理解して適用できるように、MySQL ストアド プロシージャのループ構造とその使用シナリオと使用法を紹介します。
1. MySQL ストアド プロシージャのループ構造
MySQL ストアド プロシージャのループ構造には、WHILE ループと FOR ループの 2 種類があります。以下では、その文法構造と使用シナリオを順番に紹介します。
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文が実行され、合計値を返します。
FOR ループは WHILE ループよりも簡潔なループ構造であり、その構文は次のとおりです。ループ カウンタの名前。range はループ カウンタの範囲を表します。範囲は次の形式で指定できます。
start_value TO end_value: start_value から開始し、end_value で終了するたびに、ループ カウンタは 1 ずつ増加します。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 ストアド プロシージャの循環構造は、次のシナリオでより一般的に使用されます:
データ バッチ処理たとえば、次のストアド プロシージャは、WHILE ループを使用して、製品テーブル内の価格が 100 を超える製品の価格をバッチで 5 ずつ引き下げます。
SET v = i * i; SELECT v;
カーソル cur は、次のように定義されています。横断製品 表内で価格が 100 を超えるアイテム。ループを通過するたびにカーソルからデータが取得され、p_price > 100 の場合、製品価格が更新されます。
データ分析と統計たとえば、次のストアド プロシージャは、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 ループでは、ループ カウンタの値を手動で更新する必要があります。更新しないとループが継続します。
以上がmysqlストアドプロシージャループの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。