本篇继续介绍MySQL存储过程的相关内容。
目录
一、if语句
二、case
三、循环语句
while
loop
repeat
一、if语句
在存储过程中,可以使用if语句进行条件判断,其语法结构如下:
if 判断语句 then
逻辑语句.....
elseif 判断语句 then
逻辑语句.....
elseif ......
else
逻辑语句
end if;
下面我们通过一个案例,来具体使用一下if语句:
创建一个存储过程p4,接收一个参数score,并返回一个参数result,具体的执行逻辑如下:
score < 60 返回‘不及格’
score >= 60 && score < 85 返回 “及格”
score >= 85 返回“优秀”
存储过程的创建过程具体如下:
二、case
存储过程的case实现了类似流程控制的功能,有点类似于switch,其具体语法如下:
语法一:
case case_value
when value1 then 逻辑语句
when value2 then 逻辑语句
when...
else 逻辑语句
end case;
当when 后面的value 与 case_value的值相等时, 就会执行then后面的逻辑语句 。
语法二:
case
when 判断语句 then 逻辑语句
when 判断语句 then 逻辑语句
when.....
else 逻辑语句
end case;
当when后面的判断语句成立时,就会执行后面的逻辑语句。
三、循环语句
在存储过程中,可以使用循环逻辑的语句,具体有三种不同类型的循环语句,我们来了解一下:
while
while是有判断条件的循环语句,只有满足条件,才能执行循环体的SQL,具体语法如下:
while 判断语句 do
逻辑语句
end while;
下面我们通过while来实现一下从1加到10,具体如下:
接下来我们具体调用一下:
可以发现成功获得从1加到10的结果了。
loop
loop是一种比较特殊的循环,需要搭配leave和iterate来使用,其中leave表示退出循环,iterate表示跳过本次循环,进入下一次循环,loop如果没有包含leave会进入死循环,使用loop时需要对当前loop进行标记,具体语法如下:
标记:loop
逻辑语句
end loop 标记
如果需要跳过本次循环,执行
iterate 标记
如果需要跳出循环,执行
leave 标记
下面我们使用loop实现一下从1加到10
将wret的值设为0,接下来我们调用一下w2,
然后我们再来查看一下变量wret的值
可以发现,成功算出结果了。
repeat
repeat和while类型,都是具体条件的循环语句,只不过while是在执行循环体的逻辑之前进行判断,而repeat则是在执行逻辑之后,具体语法如下:
repeat
逻辑语句
until判断语句
end repeat;
当满足until后面的判断语句时,跳出循环 。
下面我们再创建一个存储过程,这次使用repeat进行循环,具体如下:
然后我们将变量wret修改为0,然后调用w3,
此时,我们再次查看变量wret的值
可以发现使用repeat也运算成功了。