ホームページ >データベース >mysql チュートリアル >ループ用のmysqlストアドプロシージャ
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;
スコア_統計テーブルには、スコア範囲と対応する人数の結果が保存されます。データは次のとおりです:
id | score_range | count |
---|---|---|
0 -10 | 1 | |
10-20 | 2 | |
20-30 | 3 | |
30-40 | 4 | |
40-50 | 2 | |
50-60 | 1 | |
60-70 | 1 | |
70-80 | 1 | |
80-90 | 0 | |
90-100 | 1 |
以上がループ用のmysqlストアドプロシージャの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。