DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_test_while`$$
CREATE PROCEDURE `sp_test_while`(
IN p_number INT, #要循環的次數
IN p_startid INT #循環的其實值
)
BEGIN
DECLARE v_val INT DEFAULT 0;
SET v_val=p_startid;
outer_label: BEGIN #設置一個標記
WHILE v_val<=p_number DO
SET v_val=v_val+1;
IF(v_val=100)THEN
LEAVE outer_label; #滿足條件,終止循環,跳轉到end outer_label標記
END IF;
END WHILE;
SELECT ‘我是while外,outer_label內的SQL‘; #由於這句SQL在outer_label代碼塊內,所以level後,這句SQL將不會執行;
#只要是在outer_label代碼塊內 任意位置 Leave outer_label,那麼Leave後的代碼將不再執行
END outer_label;
SELECT CONCAT(‘test‘,v_val) AS tname;
END$$
DELIMITER ;
CALL sp_test_while(1000,0);
2、loop 循環
DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_testloop`$$
CREATE PROCEDURE `sp_testloop`(
IN p_number INT, #要循環的次數
IN p_startid INT #循環的其實值
)
BEGIN
DECLARE v_val INT DEFAULT 0;
SET v_val=p_startid;
loop_label: LOOP #循環開始
SET v_val=v_val+1;
IF(v_val>p_number)THEN
LEAVE loop_label; #終止循環
END IF;
END LOOP;
SELECT CONCAT(‘testloop_‘,v_val) AS tname;
END$$
delimiter ;
CALL sp_testloop(1000,0);
3、repeat循環下載地址
DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_test_repeat`$$
CREATE PROCEDURE `sp_test_repeat`(
IN p_number INT, #要循環的次數
IN p_startid INT #循環的其實值
)
BEGIN
DECLARE v_val INT DEFAULT 0;
SET v_val=p_startid;
REPEAT #repeat循環開始
SET v_val=v_val+1;
until v_val>p_number #終止循環的條件,注意這裡不能使用‘;‘分號,否則報錯
END repeat; #循環結束
SELECT CONCAT(‘test‘,v_val) AS tname;
END$$
DELIMITER ;
CALL sp_test_repeat(1000,0);