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

leave语句:
可以在循环语句内,或者begin和end包裹起来的程序体内,表示跳出循环或跳出程序体的操作。
如果你有编程语言的基础,可以理解为break;
语法:
leave 标注名;
其中,标注名表示循环或程序体的标志。
跳出程序体,举栗子:
创建存储过程,使用leave语句满足条件,跳出程序体。
delimitercreate procedure test_leave(in num int)leave_label:beginif num<=0then 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;enddelimiter ;
调用存储过程,传入0,跳出了程序体,啥都没查。

跳出循环体,举栗子:
实现每次循环给员工降到0.9倍的工资,直到全公司的平均工资小于等于10000结束,并统计循环次数输出。
delimitercreate 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<=10000then 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;enddelimiter ;
调用存储过程,获取降薪次数

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内的偶数。





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




