4.4 LOOP、REPEAT循环编程

文章详细介绍了MySQL中的LOOP和REPEAT两种循环结构的语法、功能、执行流程以及使用示例。LOOP循环需配合LEAVE语句终止,适合先执行循环体再判断条件的情况,而REPEAT循环自带结束机制,不强制要求使用LEAVE。文中还给出了用LOOP和REPEAT判断素数的函数示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LOOP循环结构

LOOP循环结构语法:

  1.      [循环语句标签:] LOOP
  2.         循环语句 ;  可包含 iterate语句
  3.     IF 结束条件 THEN
  4.             LEAVE  [循环语句标签] ;
  5.         END IF
  6.     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,做了单列处理。

  1.  create function IsPrime2( n int ) returns int
  2. begin
  3.     declare  i  int  default  2 ;    #i代表从2开始,直到n-1中的一个正整数
  4.     declare  yn  int  default  1 ;    #先假定yn 1,代表n是素数
  5.     if  n = 2 then             # 2是素数,没有大于1但小于2的整数
  6.         return yn ;
  7.     end if ;
  8.     test: LOOP
  9.              if  n % i = 0 then        #i能整除n,反证n不是素数
  10.                set yn = 0 ;        #yn 0,表示n不是素数
  11.                leave test ;        #结论已提前锁定,不再测试小于n的其它数
  12.              end if ;
  13.             
  14.               set i = i+1 ;            #准备下一个用来测试n的正整数
  15.           if  i >= n  then    #测试完毕,结束循环
  16.                   leave test ;           
  17.          end if ;
  18.      END LOOP test ;
  19.      return yn ;
  20. end $$
  21. delimiter  ;
  22. select IsPrime2( 2 ), IsPrime2( 3 ), IsPrime2( 9 )  ;

REPEAT循环结构

语法:

  1. [循环语句标签:] REPEAT
  1.     循环语句 ;  可包含ITERATELEAVE 语句
  2.     UNTIL 结束条件
  3. 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**********/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值