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

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

WBOY
WBOYオリジナル
2023-05-12 10:08:063080ブラウズ

MySQL ストアド プロシージャは、MySQL で SQL コードを作成、保存、再利用する方法です。ストアド プロシージャは、パラメータ入力を受け入れて処理し、SQL ステートメントを実行して特定のタスクを完了し、結果を返すことができます。 MySQL では、ストアド プロシージャは複雑なビジネス ロジックとデータ処理に非常に役立ち、データベースの効率と信頼性を向上させることができます。 for ループは、MySQL ストアド プロシージャで一般的に使用される制御フロー ステートメントの 1 つで、特定のコード ブロックを繰り返し実行するために使用できます。

for ループ ステートメントの基本的な構文形式は次のとおりです:

for loop_variable [reverse] in lower_bound..upper_bound loop
    -- 可执行的代码块
end loop;

このうち、loop_variable はループ変数であり、各ループで自動的に更新されます; reverse はオプションであり、ループ; lower_bound と upper_bound は、for ループの開始値と終了値であり、変数、式、または定数にすることができます。

ストアド プロシージャで for ループを使用すると、コードをより簡潔かつ効率的にすることができます。 MySQLストアドプロシージャでのforループの使い方を例を挙げて詳しく紹介します。

学生テーブル Student があり、学生 ID、名前、得点などの情報が含まれているとします。ここで、スコアに応じて生徒の数をカウントし、統計結果を新しいテーブルに保存するストアド プロシージャを作成する必要があります。 for ループ ステートメントを使用して、すべての生徒のスコアを反復処理し、スコアの範囲に基づいて生徒の数をカウントできます。

まず、スコアの統計結果を保存するための新しいテーブルscore_statisticsを作成する必要があります:

CREATE TABLE score_statistics (
  id INT(11) NOT NULL AUTO_INCREMENT,
  score_range VARCHAR(50) DEFAULT NULL,
  count INT(11) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

次に、ストアドプロシージャcalculate_score_countを作成して、学生テーブルを走査し、スコア範囲をカウントします。学生の数:

DELIMITER $$
CREATE PROCEDURE calculate_score_count()
BEGIN
  DECLARE i INT DEFAULT 0;
  DECLARE score_range VARCHAR(50);
  DECLARE count INT DEFAULT 0;
  DECLARE lower_bound INT DEFAULT 0;
  DECLARE upper_bound INT DEFAULT 0;
  SET i = 1;
  WHILE i <= 10 DO
    SET lower_bound = (i - 1) * 10;
    SET upper_bound = i * 10;
    SET score_range = CONCAT(lower_bound, '-', upper_bound);
    SET count = (SELECT COUNT(*) FROM student WHERE score BETWEEN lower_bound AND upper_bound);
    INSERT INTO score_statistics (score_range, count) VALUES (score_range, count);
    SET i = i + 1;
  END WHILE;
END$$
DELIMITER ;

上記のコードでは、while ループ ステートメントを使用してスコアの範囲を移動します。スコア範囲ごとに、対応する lower_bound と upper_bound を計算し、SELECT ステートメントを使用して値を取得します。生徒のテーブルからこの範囲内の人数を数えます。最後に、score_range と count が、score_statistics テーブルに挿入されます。

ストアド プロシージャを呼び出すと、次の結果が得られます:

call calculate_score_count();
select * from score_statistics;

スコア_統計テーブルには、スコア範囲と対応する人数の結果が保存されます。データは次のとおりです:

##10 -101210-202 320-303430-404540-502650-601 760-701870-801980-90010 90-1001
id score_range count
上記の例を通して、for ループ ステートメントを使用することで処理を簡素化できることがわかります。 MySQL ストアド プロシージャの記述により、プログラムの効率が効果的に向上します。実際の開発プロセスでは、特定のビジネス ニーズに基づいて、より効率的で柔軟なストアド プロシージャを作成できます。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。