首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 存儲過程條件判斷實戰:循環、IF、LEAVE、ITERATE 用法

     編輯:MySQL 資料庫相關知識

MySQL 存儲過程支援流程控制:IF、CASE、LOOP、WHILE、REPEAT、LEAVE、ITERATE。

示例 1:基礎循環計數器

DELIMITER $$
CREATE PROCEDURE myProc()
BEGIN
    DECLARE counter INT DEFAULT 0;
    simple_loop: LOOP
        SET counter = counter + 1;
        SELECT counter;
        IF counter = 10 THEN
            LEAVE simple_loop;
        END IF;
    END LOOP simple_loop;
    SELECT 'I can count to 10';
END$$
DELIMITER ;

CALL myProc();
-- 輸出 1 到 10,最後輸出提示字符串

示例 2:帶標籤的嵌套循環控制

CREATE PROCEDURE myProc2()
BEGIN
    DECLARE i INT DEFAULT 1;
    myloop: LOOP
        SET i = i + 1;
        IF i = 10 THEN
            LEAVE myloop;
        END IF;
    END LOOP myloop;
    SELECT 'I can count to 10';
END

示例 3:帶參數與 ITERATE 跳過邏輯

CREATE PROCEDURE increment(IN in_count INT)
BEGIN
    DECLARE cnt INT DEFAULT 0;
    inc_loop: LOOP
        SET cnt = cnt + 1;
        IF cnt < 20 THEN
            ITERATE inc_loop;  -- 跳過本輪剩餘,直接下一輪
        END IF;
        IF cnt > in_count THEN
            LEAVE inc_loop;    -- 退出循環
        END IF;
    END LOOP inc_loop;
    SELECT cnt;
END

CALL increment(3);  -- 輸出 20

關鍵字對照表

關鍵字作用類比
LOOP ... END LOOP無條件循環while(true)
LEAVE label跳出指定標籤循環break
ITERATE label跳過本輪,進入下一輪continue
WHILE condition DO ... END WHILE前置條件循環while
REPEAT ... UNTIL condition END REPEAT後置條件循環do-while

最佳實踐

  • 複雜邏輯優先用應用層實現,存儲過程僅封裝高頻、原子性業務。
  • 避免長事務與大結果集在存儲過程中處理,防止鎖爭用與內存壓力。
  • 調試時可用 SELECT ... INTO @var 捕獲中間值,或啟用 general_log 追蹤。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved