1、while循环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);