MySQL 支援在存儲過程中使用流程控制語句(IF、CASE、WHILE、REPEAT、LOOP)。本文以一個獨立可執行的範例,示範變量宣告、WHILE 迴圈、存儲過程建立與呼叫的完整語法。
DROP PROCEDURE IF EXISTS u_head_and_low_pro;
DELIMITER //
CREATE PROCEDURE u_head_and_low_pro()
BEGIN
DECLARE n INT DEFAULT 10;
SET n = n - 1;
WHILE n > 0 DO
SELECT n;
SET n = n - 1;
END WHILE;
END //
DELIMITER ;
CALL u_head_and_low_pro();
; 改為 //,避免過程體內的 ; 被誤判為結束。DECLARE n INT DEFAULT 10;:在 BEGIN ... END 區塊開頭宣告區域變量。SET n = n - 1;:賦值語句,也可用 SELECT n - 1 INTO n;。WHILE condition DO ... END WHILE;:先判斷條件再執行,若初始條件為假則不進入迴圈。CALL proc_name();:呼叫存儲過程。執行後會依序輸出 9, 8, 7, 6, 5, 4, 3, 2, 1(每行一個結果集)。
label_name: WHILE ... DO ... LEAVE label_name; ... END WHILE;。DECLARE CONTINUE HANDLER FOR NOT FOUND 遍歷結果集。存儲過程適合封裝複雜業務邏輯、減少網路往返,但過度使用會增加資料庫負擔且難以版本控制,建議核心邏輯放應用層,資料庫層僅做資料存取與簡單聚合。