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

Susan Sarandon
リリース: 2024-11-15 06:39:02
オリジナル
335 人が閲覧しました

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' の各行をループして、指定された操作が実行されます。

Example

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート