MySQL数据库——存储过程-循环(while、repeat、loop)

目录

while

介绍

案例

repeat

介绍

案例

loop

介绍

案例一

案例二


while

介绍

while 循环是有条件的循环控制语句。满足条件后,再执行循环体中的SQL语句。具体语法为:

-- 先判定条件,如果条件为true,则执行逻辑,否则,不执行逻辑

WHILE 条件 DO

    SQL逻辑...

END WHILE;

案例

计算从1累加到n的值,n为传入的参数值。

-- A. 定义局部变量, 记录累加之后的值;
-- B. 每循环一次, 就会对n进行减1 , 如果n减到0, 则退出循环

create procedure p(in n int)
begin

    declare total int default 0;

        while n>0 do
            set total := total + n;
            set n := n - 1;
        end while;

select total;

end;

call p(100);

repeat

介绍

repeat是有条件的循环控制语句, 当满足until声明的条件的时候,则退出循环 。具体语法为:

-- 先执行一次逻辑,然后判定UNTIL条件是否满足,如果满足,则退出。
-- 如果不满足,则继续下一次循环

REPEAT

    SQL逻辑...

    UNTIL 条件

END REPEAT;

案例

计算从1累加到n的值,n为传入的参数值。(使用repeat实现)

-- A. 定义局部变量, 记录累加之后的值;
-- B. 每循环一次, 就会对n进行-1 , 如果n减到0, 则退出循环

create procedure p(in n int)
begin

    declare total int default 0;

    repeat
        set total := total + n;
        set n := n - 1;
        until n <= 0
    end repeat;

select total;

end;

call p(10);
call p(100);

loop

介绍

LOOP 实现简单的循环,如果不在SQL逻辑中增加退出循环的条件,可以用其来实现简单的死循环。
LOOP可以配合一下两个语句使用:

  • LEAVE :配合循环使用,退出循环。
  • ITERATE:必须用在循环中,作用是跳过当前循环剩下的语句,直接进入下一次循环。
[begin_label:] LOOP

    SQL逻辑...

END LOOP [end_label];
LEAVE label; -- 退出指定标记的循环体

ITERATE label; -- 直接进入下一次循环

上述语法中出现的 begin_label,end_label,label 指的都是我们所自定义的标记,可以自己进行命名。 

案例一

计算从1累加到n的值,n为传入的参数值。

-- A. 定义局部变量, 记录累加之后的值;
-- B. 每循环一次, 就会对n进行-1 , 如果n减到0, 则退出循环 ----> leave xx

create procedure p(in n int)
begin

    declare total int default 0;
    
    sum:loop

        if n<=0 then
            leave sum;
        end if;

        set total := total + n;
        set n := n - 1;

    end loop sum;

    select total;

end;

call p(100);

案例二

计算从1到n之间的偶数累加的值,n为传入的参数值。

-- A. 定义局部变量, 记录累加之后的值;
-- B. 每循环一次, 就会对n进行-1 , 如果n减到0, 则退出循环 ----> leave xx
-- C. 如果当次累加的数据是奇数, 则直接进入下一次循环. --------> iterate xx

create procedure p(in n int)
begin

    declare total int default 0;

    sum:loop
    
        if n<=0 then
            leave sum;
        end if;

        if n%2 = 1 then
            set n := n - 1;
            iterate sum;
        end if;
    
        set total := total + n;
        set n := n - 1;
    
    end loop sum;

    select total;

end;

call p(100);


END


学习自:黑马程序员——MySQL数据库课程

猜你喜欢

转载自blog.csdn.net/li13437542099/article/details/134253955