Mysql中的三种循环

1,while…do…end while

/*  while循环语法:
while 条件 DO
            循环体;
end while;
*/

-- 实例:
create procedure sum1(a int) 
begin
    declare sum int default 0;  -- default 是指定该变量的默认值
    declare i int default 1;
while i<=a DO -- 循环开始
    set sum=sum+i;
    set i=i+1;
end while; -- 循环结束
select sum;  -- 输出结果
end
-- 执行存储过程
call sum1(100);
-- 删除存储过程
drop procedure if exists sum1

-- 实例2
DROP PROCEDURE IF EXISTS mywhile;
CREATE PROCEDURE mywhile ()
BEGIN
DECLARE i INT default 0;
outer_label: BEGIN  #设置一个标记并设置开始
while i<10 DO
SET i = i + 1;
IF i > 2 THEN
select '跳出循环' column1;
LEAVE  outer_label;  #满足条件,终止循环,跳转到end outer_label标记
ELSE
SELECT i as column1;
END IF;
end while;
END outer_label;  #设置标记并结束
END
call mywhile;

2,loop…leave…end loop

/*loop 循环语法:
loop_name:loop
        if 条件 THEN -- 满足条件时离开循环
                leave loop_name;  -- 和 break 差不多都是结束训话
        end if;
end loop;
*/
-- 实例:
create procedure sum2(a int)
begin
        declare sum int default 0;
        declare i int default 1;
        loop_name:loop -- 循环开始
            if i>a then 
                leave loop_name;  -- 判断条件成立则结束循环  好比java中的 boeak
            end if;
            set sum=sum+i;
            set i=i+1;
        end loop;  -- 循环结束
        select sum; -- 输出结果
end
-- 执行存储过程
call sum2(100);
-- 删除存储过程
drop procedure if exists  sum2

-- 实例2
DECLARE num  INT;
DECLARE str  VARCHAR(255);
SET num =1;
SET my_string = '';
loop_label:  LOOP
IF  num <10THEN
      LEAVE  loop_label;-- 相当于java中的break
ENDIF;
SET  num = num +1;
IF(num mod3)THEN
      ITERATE  loop_label; -- iterate相当于java中continue
ELSE
SET  my_string =CONCAT(my_string,num,',');
ENDIF;
END LOOP;
3,repeat…until…end repeat
/*repeat 循环语法
repeat
    循环体
until 条件 end repeat;
*/
-- 实例;
create procedure sum3(a int)
begin
        declare sum int default 0;
        declare i int default 1;
        repeat -- 循环开始
            set sum=sum+i;
            set i=i+1;
        until i>a end repeat; -- 循环结束
        select sum; -- 输出结果
end

-- 执行存储过程
call sum3(100);
-- 删除存储过程
drop procedure if exists sum3

在MySQL存储过程,需要循环结构 有个名称 ,其他都是一样的.
mysql中没有for…in…循环

猜你喜欢

转载自blog.csdn.net/qq125281823/article/details/85772549