ホームページ >データベース >mysql チュートリアル >ストアド プロシージャを使用して MySQL テーブル内のすべての行を反復処理するにはどうすればよいですか?

ストアド プロシージャを使用して MySQL テーブル内のすべての行を反復処理するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-15 06:39:02424ブラウズ

How can I iterate through all rows in a MySQL table using a stored procedure?

プロシージャを使用したテーブルのすべての行のループ

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 サイトの他の関連記事を参照してください。

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