プロシージャを使用したテーブルのすべての行のループ
MySQL では、テーブルのすべての行をループするにはストアド プロシージャを作成する必要があります。プロシージャを使用すると、一連の SQL ステートメントを 1 つのユニットにカプセル化し、ブロックとして実行できます。
プロシージャの作成
テーブルのすべての行をループするには「A」を使用して特定の操作を実行するには、次の手順を使用してプロシージャを作成します。構文:
DROP PROCEDURE IF EXISTS ROWPERROW; -- Delete existing procedure if any DELIMITER ;; -- Change delimiter to avoid statement-by-statement execution CREATE PROCEDURE ROWPERROW() BEGIN DECLARE n INT DEFAULT 0; -- Declare a variable to count rows DECLARE i INT DEFAULT 0; -- Declare a variable for looping SELECT COUNT(*) INTO n FROM table_A; -- Get the total number of rows SET i = 0; -- Initialize loop counter WHILE i < n DO -- Insert the current row into table 'B' INSERT INTO table_B(ID, VAL) SELECT (ID, VAL) FROM table_A LIMIT i, 1; SET i = i + 1; -- Increment loop counter END WHILE; End; ;; DELIMITER ; -- Reset the delimiter
プロシージャの実行
プロシージャが作成されたら、次の構文を使用して呼び出すことができます:
CALL ROWPERROW();
これにより、プロシージャが実行され、テーブル 'A' の各行をループして、指定された処理が実行されます。
例
フィールド 'ID' と 'VAL' を持つ 2 つのテーブル 'A' と 'B' があるとします。次のプロシージャは、テーブル 'A' のすべての行をループし、データをテーブル 'B' にコピーします。
DROP PROCEDURE IF EXISTS ROWPERROW; DELIMITER ;; CREATE PROCEDURE ROWPERROW() BEGIN DECLARE n INT DEFAULT 0; DECLARE i INT DEFAULT 0; SELECT COUNT(*) INTO n FROM table_A; SET i = 0; WHILE i < n DO INSERT INTO table_B(ID, VAL) SELECT (ID, VAL) FROM table_A LIMIT i, 1; SET i = i + 1; END WHILE; End; ;; DELIMITER ;
プロシージャを実行してデータをコピーするには、次のコマンドを実行します。
CALL ROWPERROW();
以上がストアド プロシージャを使用して MySQL テーブル内のすべての行を反復処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。