暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第44讲:MySQL的跳转语句

何先振 2023-12-12
279

以下文章来源于何先振,责编小何


跳转语句leave



leave语句:


可以在循环语句内,或者begin和end包裹起来的程序体内,表示跳出循环或跳出程序体的操作。


如果你有编程语言的基础,可以理解为break;


语法:


    leave 标注名;


    其中,标注名表示循环或程序体的标志。


    跳出程序体,举栗子:


    创建存储过程,使用leave语句满足条件,跳出程序体。

      delimiter 
      create procedure test_leave(in num int)
      leave_label:begin
      if num<=0
      then leave leave_label;
      elseif num=1
      #num=1 跳出程序体
      then select avg(salary) from employees;
      elseif num=2
      #num=2 查出最低的工资
      then select min(salary) from employees;
      else
      #num等于其它,查出最大的工资
      select max(salary) from employees;
      end if;

      #查询总人数
      select count(*) from employees;
      end
      delimiter ;


      调用存储过程,传入0,跳出了程序体,啥都没查。





      跳出循环体,举栗子:


      实现每次循环给员工降到0.9倍的工资,直到全公司的平均工资小于等于10000结束,并统计循环次数输出。

        delimiter 
        create procedure leave_mid_sal(out num int)
        begin
        #声明变量
        #记录平均工资
        declare avg_sal double;
        #记录循环次数
        declare while_count int default 0;
        #获取初始平均工资
        select avg(salary) into avg_sal from employees;
        while_label:while true do
        #如果平均工资减到小于等于10000退出循环体
        if avg_sal<=10000
        then leave while_label;
        end if;

        #降薪
        update employees set salary=salary*0.9;
        #累加
        set while_count=while_count+1;
        #重新赋值平均工资
        select avg(salary) into avg_sal from employees;
        end while;
        #赋值
        set num=while_count;
        end
        delimiter ;


        调用存储过程,获取降薪次数





        跳转语句iterate



        iterate语句:


        只能用在循环语句内,表示重新开始循环,将执行顺序转到语句段开头处。


        如果有编程语言的基础,类似于continue;再次循环。


        语法格式:


          iterate 标注名;


          循环体中使用iterate语句,举栗子:

            delimiter //
            create procedure iterate_test()
            begin
            #声明变量
            declare num int default 0;
            #使用loop循环
            loop_label:loop
            #累加
            set num=num+1;
            #判断
            #偶数,并且小于20就查询
            if num%2=0 and num<=20 then select num;
            #大于20结束循环
            elseif num>20 then leave loop_label;
            #奇数跳出本次循环
            else iterate loop_label;
            end if;
            end loop;
            end //
            delimiter ;


            调用存储过程,获取20内的偶数。















            推荐阅读书籍

            点击上方"何先振"关注并选择设为星标
            各类IT技术文章不会错过!

            文章转载自何先振,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论