Heim >Datenbank >MySQL-Tutorial >Wie kann ich mithilfe einer gespeicherten Prozedur alle Zeilen in einer MySQL-Tabelle durchlaufen?

Wie kann ich mithilfe einer gespeicherten Prozedur alle Zeilen in einer MySQL-Tabelle durchlaufen?

Susan Sarandon
Susan SarandonOriginal
2024-11-15 06:39:02424Durchsuche

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

Durchlaufen aller Zeilen einer Tabelle mithilfe einer Prozedur

In MySQL erfordert das Durchlaufen aller Zeilen einer Tabelle das Erstellen einer gespeicherten Prozedur. Eine Prozedur ermöglicht es Ihnen, eine Reihe von SQL-Anweisungen in einer einzigen Einheit zu kapseln und sie als Block auszuführen.

Erstellen der Prozedur

Um alle Tabellenzeilen zu durchlaufen 'A' und führen Sie bestimmte Vorgänge aus. Erstellen Sie eine Prozedur mit der folgenden Syntax:

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

Ausführen der Prozedur

Sobald die Prozedur erstellt ist, kann sie mit der folgenden Syntax aufgerufen werden:

CALL ROWPERROW();

Dadurch wird die Prozedur ausgeführt und jede Zeile der Tabelle „A“ wird durchlaufen. Ausführen der angegebenen Vorgänge.

Beispiel

Angenommen, Sie haben zwei Tabellen, 'A' und „B“, mit den Feldern „ID“ und „VAL“. Die folgende Prozedur durchläuft alle Zeilen der Tabelle „A“ und kopiert die Daten in Tabelle „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 ;

Um die Prozedur auszuführen und die Daten zu kopieren, führen Sie den folgenden Befehl aus:

CALL ROWPERROW();

Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe einer gespeicherten Prozedur alle Zeilen in einer MySQL-Tabelle durchlaufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn