LOOP循环结构
LOOP循环结构语法:
- [循环语句标签:] LOOP
- 循环语句 ; # 可包含 iterate语句
- IF 结束条件 THEN
- LEAVE [循环语句标签] ;
- END IF
- END LOOP [循环语句标签] ;
功能:当结束条件不成立时,一遍又一遍反复执行循环体,直到结束条件成立为止。
LOOP执行流程: ①执行1遍循环语句 ②求解“结束条件”:若结果为False,转第①步,若为True转第③步; ③结束循环,执行紧邻的后续语句。 流程图:
需要注意的是: LOOP之前的可选项“[循环语句标签:]”和END LOOP 之后的“[循环语句标签]”必须一致。 END LOOP后必须以“;”结束。 “循环语句 ;”可以是1条或多条MySQL语句,可包含iterate语句。 关于leave和iterate的区别,请参见上一讲视频。 LOOP循环本身没有结束循环的机制,必须使用LEAVE方可终止循环,而LEAVE一般配合IF语句使用。
使用示例: 素数是只能被1和它自身整除的正整数。请用LOOP循环设计函数IsPrime2,判断给定正整数n是不是素数。
用LOOP改写上一关所写的测试循环, 因为Loop循环是先执行循环体,再判断条件,对于特殊的素数2,做了单列处理。
- create function IsPrime2( n int ) returns int
- begin
- declare i int default 2 ; #i代表从2开始,直到n-1中的一个正整数
- declare yn int default 1 ; #先假定yn为 1,代表n是素数
- if n = 2 then # 2是素数,没有大于1但小于2的整数
- return yn ;
- end if ;
- test: LOOP
- if n % i = 0 then #i能整除n,反证n不是素数
- set yn = 0 ; #改yn为 0,表示n不是素数
- leave test ; #结论已提前锁定,不再测试小于n的其它数
- end if ;
- set i = i+1 ; #准备下一个用来测试n的正整数
- if i >= n then #测试完毕,结束循环
- leave test ;
- end if ;
- END LOOP test ;
- return yn ;
- end $$
- delimiter ;
- select IsPrime2( 2 ), IsPrime2( 3 ), IsPrime2( 9 ) ;
REPEAT循环结构
语法:
- [循环语句标签:] REPEAT
- 循环语句 ; # 可包含ITERATE和LEAVE 语句
- UNTIL 结束条件
- END REPEAT [循环语句标签] ;
功能:当结束条件不成立时,一遍又一遍反复执行循环体,直到结束条件成立为止。
REPEAT执行流程: ①执行1遍循环语句 ②求解“结束条件”:若结果为False,转第①步,若为True转第③步; ③结束循环,执行紧邻的后续语句。
流程图:
需要注意的是: REPEAT之前的可选项“[循环语句标签:]”和END REPEAT之后的“[循环语句标签]”必须一致。 END REPEAT后必须以“;”结束。 “循环语句 ;”可以是1条或多条MySQL语句,
可包含 ITERATE和LEAVE语句。 关于leave和iterate的区别,请参见上一讲视频。 REPEAT循环本身就带有结束循环的机制,LEAVE语句不是必须的。
根据提示,在右侧编辑器补充代码,使用REPEAT语句实现以下需求:
#请用repeat语句实现相应功能。
/**********Begin**********/
test: repeat
fetch rs into x,y;
if x>=60 then
set s=s+y;
end if;
set m=m+1;
until m>n
end repeat;
/**********End**********/