当前位置: 代码迷 >> 综合 >> MySQL -> 流程控制函数:分支(if,case),循环(while,loop,repeat)
  详细解决方案

MySQL -> 流程控制函数:分支(if,case),循环(while,loop,repeat)

热度:96   发布时间:2023-12-16 09:49:56.0

分支函数之if结构:if(表达式1,表达式2,表达式3)函数;if 条件 then 语句;elseif then

# if()函数
"if(表达式1,表达式2,表达式3)":可以用在任何地方
如果表达式1成立,则返回表达式2;
如果表达式1不成立,则返回表示式3;# if结构
"在函数中输入一个年龄,给年龄分组":
delimiter #
create function mmp2(age int) returns varchar(22)
begin if age>=60 and age<=110 then return '老人';elseif age between 30 and 60 then return '中年人'else return '小人';end if;
end $select mmp2(23)$

分支函数之case结构:语句后面加 ; ,

"begin end之外的时"
# 一:等值
case age
when 11 then "返回"
when 22 then "返回"
else "返回"
end# 二:条件
case 
when age>11 then "返回"
when age>22 then "返回"
else "返回"
end"在存储过程中输入一个年龄,给年龄分组":
delimiter $
create procedure mmp(in age int)
begincasewhen age>=60 then select '老人'; # then后面是语句,要加;when age>=30 then select '中年人';else select '小人';end case; # begin end中结束要加case 和 ;
end $call mmp(50)$

循环:while,loop,repeat

"简单的while循环":
# procedure和function的选择,不需要返回值的时候必须用procedure,只有一个返回的时候使用function
"进行多次添加数据"
delimiter $
create procedure mmp(in number int)
begindeclare led int default 1;while led<=number do  # while 条件 do 循环体; end while;insert into(id,name) values(concat('rod',led),'0000');set led=led+1;end while;
end $call mmp(100)$# 添加100次
"添加标签":使用leave,iterate的时候需要用到标签
delimiter $
create procedure mmp(in number int)
begindeclare led int default 1;a:while led<=number do  # 标签ainsert into(id,name) values(concat('rod',led),'0000');set led=led+1;end while a;# 关闭的时候也要用a标签
end $

循环中的break,continue:SQL中iterate类似continue,leave类似break

"使用leave停止while循环"
delimiter $
create procedure mmp1(in number int)
begindeclare led int default 1;a:while led<=number doif led>=20 then leave a;# 如果led>=20,就停止leave,a标签标标示放回到a索引end if;insert into(id,name) values(concat(('rod'),led),'0000');set led=led+1;end while a;
end $call mmp(100)$	#添加100次,虽然它最多添加20次"iterate:"
delimiter $
create procedure mmp2(number int)
begindeclare led int default 0;a:while led<=number doset led=led+1;if mod(led,2)==0 then iterate a;# 如果led+1为偶数(因为是从0开始,所以这里+1从1开始的),则跳出循环end if;insert into(id,name) values(concat(('rod'),led),'0000');#此时的led是已经+1的ledend while a;
end $call mmp2(100)$
"loop无线循环"
# 无限循环体loop,不存在条件,想结束只有自己加if等条件leave,iterate结束loop
a:loop循环体
end loop a;"先执行在判断"
a:repeat循环体;
until 结束条件  # 这里不是循环条件,是结束循环的条件
end repeat a;

在这里插入图片描述

  相关解决方案