首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 預存過程中使用 WHILE 循環實現批量處理

     編輯:MySQL 綜合教學

MySQL 預存過程中使用 WHILE 循環實現批量處理

MySQL 預存過程支援 WHILE 循環,配合變數與條件判斷可實現批量資料生成、周期性維護等邏輯。

語法結構

[label:] WHILE condition DO
    statements
END WHILE [label];
  • label 可選,用於 LEAVE label 跳出循環或 ITERATE label 進入下一次迭代。
  • condition 為真則持續循環。

完整範例:列印 1-10 中的奇數

DELIMITER $$

CREATE PROCEDURE print_odd_numbers()
BEGIN
    DECLARE i INT DEFAULT 1;
    loop_odd: WHILE i <= 10 DO
        IF MOD(i, 2) <> 0 THEN
            SELECT CONCAT(i, ' is an odd number') AS msg;
        END IF;
        SET i = i + 1;
    END WHILE loop_odd;
END$$

DELIMITER ;

CALL print_odd_numbers();

執行結果

+----------------------+
| msg                  |
+----------------------+
| 1 is an odd number   |
| 3 is an odd number   |
| 5 is an odd number   |
| 7 is an odd number   |
| 9 is an odd number   |
+----------------------+

進階用法提示

  • 游標結合循環:DECLARE cur CURSOR FOR SELECT ...; OPEN cur; FETCH cur INTO var; WHILE done=0 DO ... FETCH cur INTO var; END WHILE; CLOSE cur;
  • 動態 SQL 循環執行:循環中構造 PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  • 異常處理:在循環內用 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION ... 捕獲錯誤並記錄,避免整個過程中斷。
  • 效能注意:避免在循環中逐行 INSERT,改用批量 INSERT ... VALUES (),(),() 或載入臨時表再 INSERT ... SELECT。

適用場景

  • 定時任務:分區維護、歸檔舊數據、統計報表生成。
  • 測試資料批量初始化。
  • 複雜業務規則需迭代計算(如利息複利、庫存滾動)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved