开发者社区> 王小王-123> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

MySQL的存储过程——流程控制-while、repeat、loop循环

简介: MySQL的存储过程——流程控制-while、repeat、loop循环
+关注继续查看

循环是一段在程序中只出现一次,但可能会连续运行多次的代码。


循环中的代码会运行特定的次数,或者是运行到特定条件成立时结束循环。


image.png


循环分类:


while


repeat


loop


循环控制:


leave 类似于 break,跳出,结束当前所在的循环


iterate类似于 continue,继续,结束本次循环,继续下一次


while循环

【标签:】while 循环条件 do
    循环体;
end while【 标签】;
-- 创建测试表
create table user (
    uid int primary_key,
    username varchar ( 50 ),
    password varchar ( 50 )
);
-- -------存储过程-while
delimiter $$
create procedure proc16_while1(in insertcount int)
begin
    declare i int default 1;
    label:while i<=insertcount do
        insert into user(uid,username,`password`) values(i,concat('user-',i),'123456');
        set i=i+1;
    end while label;
end $$
delimiter ;
call proc16_while(10);
存储过程语法是固定的:delimiter
createpeocedure循环名(参数)begin代码end
createpeocedure循环名(参数)begin代码end
delimiter;



注意在写循环体的时候,必须要要有定义循环的初识变量,采用declare i int default 默认值


然后就是dlabel:while 判断条件 do 循环体 end while label; end && 必须要有


-- -------存储过程-while + leave
truncate table user;
delimiter $$
create procedure proc16_while2(in insertcount int)
begin
    declare i int default 1;
    label:while i<=insertcount do
        insert into user(uid,username,`password`) values(i,concat('user-',i),'123456');
        if i=5 then leave label;
        end if;
        set i=i+1;
    end while label;
end $$
delimiter ;
call proc16_while2(10);

如果在内部需要跳出循环的话,采用if 判断 ,但是最后需要end if 结尾


这里的leave就是 跳出循环,相对于break


-- -------存储过程-while+iterate
truncate table user;
delimiter $$
create procedure proc16_while3(in insertcount int)
begin
    declare i int default 1;
    label:while i<=insertcount do
        set i=i+1;
        if i=5 then iterate label;
        end if;
        insert into user(uid,username,`password`) values(i,concat('user-',i),'123456');
    end while label;
end $$
delimiter ;
call proc16_while3(10);

这里的iterate 相对于continue 遇到就不执行下面的代码


repeat循环

[标签:]repeat 
 循环体;
until 条件表达式
end repeat [标签];
-- -------存储过程-循环控制-repeat 
use mysql7_procedure;
truncate table user;
delimiter $$
create procedure proc18_repeat(in insertCount int)
begin
     declare i int default 1;
     label:repeat
         insert into user(uid, username, password) values(i,concat('user-',i),'123456');
         set i = i + 1;
         until  i  > insertCount
     end repeat label;

    select '循环结束';

end $$

delimiter ;

call proc18_repeat(100);

这个相对于是,无论如何都会执行一次的循环,然后是在内部进行判断,如果满足了就直接跳出


loop循环

[标签:] loop
  循环体;
  if 条件表达式 then 
     leave [标签]; 
  end if;
end loop;
-- -------存储过程-循环控制-loop
truncate table user;
delimiter $$
create procedure proc19_loop(in insertCount int) 
begin
     declare i int default 1;
     label:loop
         insert into user(uid, username, password) values(i,concat('user-',i),'123456');
         set i = i + 1;
         if i > 5 
          then 
           leave label;
         end if;
     end loop label;
     select '循环结束';
end $$
delimiter ;
call proc19_loop(10);

这个和repeat不同的是,需要执行之后,利用leave 跳出循环,无论是使用哪种都可以达到我们需要的效果,但是在业务中的应用场景,while还是相对比较的多。



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
存储基础:ATA、SATA、SCSI、SAS、FC
一、概述 关于存储,作为一名运维工程师我觉得是很有必要去花点时间去了解一下的!磁盘是服务器、存储设备的主要存储媒介之一,非常重要! 按照存储介质类型一般分为机械磁盘(HDD、传统磁性硬盘)、固态磁盘(SSD,主要使用闪存颗粒来存储)、混合磁盘(HHD,磁性硬盘和闪存集成到一起的硬盘)。
1697 0
ORACLE 存储过程中的Authid Current_User
ORACLE用户具有DBA权限,却会出现无法在存储过程里面创建一张普通表的现象。因为即使用户拥有DBA权限,用户拥有的role权限在存储过程是不可用的。遇到这种情况,通常解决方法是进行显式的权限分配: grant create table to user a;但这种方法太麻烦,因为有可能执行一个存储过程,需要很多不同权限。
1086 0
解决在onCreate()过程中获取View的width和Height为0的方法
最近在看Android底层代码的view绘制原理的时候讲到一个很有意思的事情,也是我几年前刚开始学习Android开发的时候比较纳闷的一个问题,如果你不理解Android的底层绘制,请看我之前一片文章对View绘制的简单分析点击打开链接。 那么在onCreate()获取view的width和height会得到0呢,原因是Android的oncreate和onMesure是不同步的,我们在
1660 0
畅通工程,How Many Tables ACM第九天-图论
下面两题的方法是一样的都是并查集的应用; 并查集的重点就是找到祖先节点的过程。 重点在这里:int find(int x){ return p[x] == x ? x : p[x] = find( p[x]); } 不断地递归,递归到找到自己是自己的祖先为止。
1015 0
Asp.Net MVC 分页、检索、排序整体实现
原文:Asp.Net MVC 分页、检索、排序整体实现     很多时候需要这样的功能,对表格进行分页、排序和检索。这个有很多实现的方式,有现成的表格控件、用前端的mvvm,用户控件。但很多时候看着很漂亮的东西你想进一步控制的时候却不那么如意。
1086 0
编译存储过程 等待锁定对象 时超时问题解决
编译的存储过程的时候,程序死住,等待一会出现ora-04021错误解决办法:1.可能被锁住 查看v$lockedselect b.sid,b.serial#,b.machine,b.terminal,b.
795 0
+关注
王小王-123
快乐代码,精彩人生!
268
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载