Maison >base de données >tutoriel mysql >Comment puis-je parcourir toutes les lignes d'une table MySQL à l'aide d'une procédure stockée ?

Comment puis-je parcourir toutes les lignes d'une table MySQL à l'aide d'une procédure stockée ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-15 06:39:02424parcourir

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

Parcourir toutes les lignes d'une table à l'aide d'une procédure

Dans MySQL, parcourir toutes les lignes d'une table nécessite la création d'une procédure stockée. Une procédure vous permet d'encapsuler une série d'instructions SQL dans une seule unité et de les exécuter sous forme de bloc.

Création de la procédure

Pour parcourir toutes les lignes du tableau 'A' et effectuez des opérations spécifiques, créez une procédure en utilisant la syntaxe suivante :

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

Exécuter le Procédure

Une fois la procédure créée, elle peut être appelée en utilisant la syntaxe suivante :

CALL ROWPERROW();

Cela exécutera la procédure et parcourra chaque ligne du tableau 'A', effectuer les opérations spécifiées.

Exemple

Supposons que vous ayez deux tables, 'A' et 'B', avec les champs 'ID' et 'VAL'. La procédure suivante parcourt toutes les lignes du tableau « A » et copie les données dans le tableau « 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 ;

Pour exécuter la procédure et copier les données, exécutez la commande suivante :

CALL ROWPERROW();

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn