使用流程循環遍歷表中的所有行
在 MySQL 中,循環遍歷表的所有行需要建立預存程序。過程允許您將一系列 SQL 語句封裝到一個單元中並將它們作為一個區塊執行。
建立過程
循環遍歷表的所有行'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」的每一行,執行指定的操作。
範例
假設您有兩個表格“A”和“B”,其中欄位為“ID”和“VAL”。以下過程循環遍歷表「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中文網其他相關文章!