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

MySQL WHILE 迴圈與存儲過程實戰範例

     編輯:MySQL 綜合教學

MySQL WHILE 迴圈與存儲過程實戰範例

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();

關鍵點解析

  1. DELIMITER:暫時將語句結束符從 ; 改為 //,避免過程體內的 ; 被誤判為結束。
  2. DECLARE n INT DEFAULT 10;:在 BEGIN ... END 區塊開頭宣告區域變量。
  3. SET n = n - 1;:賦值語句,也可用 SELECT n - 1 INTO n;。
  4. WHILE condition DO ... END WHILE;:先判斷條件再執行,若初始條件為假則不進入迴圈。
  5. CALL proc_name();:呼叫存儲過程。

輸出結果

執行後會依序輸出 9, 8, 7, 6, 5, 4, 3, 2, 1(每行一個結果集)。

進階補充

  • LEAVE 標籤:可在迴圈中提前跳出 label_name: WHILE ... DO ... LEAVE label_name; ... END WHILE;。
  • ITERATE 標籤:跳過本次迴圈剩餘語句直接進入下一次判斷。
  • REPEAT ... UNTIL:後測試迴圈,至少執行一次。
  • 游標:配合 DECLARE CONTINUE HANDLER FOR NOT FOUND 遍歷結果集。
存儲過程適合封裝複雜業務邏輯、減少網路往返,但過度使用會增加資料庫負擔且難以版本控制,建議核心邏輯放應用層,資料庫層僅做資料存取與簡單聚合。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved