mysql while,loop,repeat循环,符合条件跳出循环

mysql while,loop,repeat循环,符合条件跳出循环


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

 example:求幂函数

drop function if exists math_int;

delimiter //
create function math_int(a int ,b int)
returns double 
BEGIN
declare ret int;
set ret := 1;
-- 第一种 while循环
-- while b > 0 
-- do 
-- select ret*a into ret from dual;
-- set b = b - 1 ;
-- END WHILE;


-- 第二种 repeat循环
-- repeat 
-- select ret * a into ret from dual;
-- set b = b - 1 ;
-- until b = 0 
-- end repeat;


-- 第三种 loop循环
loop_label:  LOOP   #循环开始 循环名称
select ret * a into ret from dual;
set b = b - 1 ; 
 
IF b = 0 THEN
LEAVE  loop_label;  #终止循环 也就意味着可以跳出指定循环
END IF;
END LOOP; 


return ret;
end;
//
delimiter ;
select math_int(10,2);

mysql while,loop,repeat循环,符合条件跳

你可能感兴趣的:(数据库)