目录

MySQL存储过程的流程控制

if判断结构

格式1:

格式2:

格式3:

示例:

case分支结构

格式:

示例:

循环结构

while 循环结构:

语法格式:

示例:

loop循环结构:

语法格式:

示例:

repeat循环结构:

语法格式:

示例:

循环控制命令

格式:

给循环定义名字

示例:


MySQL存储过程的流程控制

if判断结构

格式1:

if 条件 then

  语句;

end if;

格式2:

if 条件 then

  语句1;

else

  语句2;

end if;

格式3:

if 条件1 then

  语句1;

elseif 条件2 then

  语句2;

else

  语句3;

end if;

示例:

delimiter  //

create proucedure tarena.deptype_pro( in no int,out dept_type varchar(5))

begin

declare type varchar(5);

select dept_name into type from tarena.repartments where dept_id=no;

if type=’运维部’ then

set dept_type=’技术部’;

elseif type=’开发部’ then

set dept_type=’技术部’;

elseif type=’测试部’ then

set dept_type=’技术部’;

else

set dept_type=’非技术部’;

end if;

end //

delimiter;

case分支结构

格式:

case 变量|表达式|字段

when 判断的值1 then 返回值1;

when 判断的值2 then 返回值2;

... ...

else 返回值 n;

end case;

示例:

delimiter  //

create proucedure tarena.deptype_pro2( in no int,out dept_type varchar(5))

begin

declare type varchar(5);

select dept_name into type from tarena.departments where dept_id=no;

case type

when ’运维部’ then set dept_type=’技术部’;

when ’开发部’ then set dept_type=’技术部’;

when ’测试部’ then set dept_type=’技术部’;

else

set dept_type=’非技术部’;

end case;

end //

delimiter;

循环结构

while 循环结构:

条件判断成立时,重复执行同一段但没

如果第一次判断条件就不成立,会直接结束循环

语法格式:

while 判断条件 do

  代码

end while;

示例:

//根据输入的数字(变量i)决定执行几遍插入语句,整数大于1就会插入数据

delimiter  //

create proucedure tarena.while_pro( in i int )

begin

declare j int default 1;

while j<i do

insert into tarena.departments(dept_name) values(‘hr’);

set j=j+1;

end while;

end //

delimiter;

loop循环结构:

没有判断条件,重复执行同一段代码,只要不人为结束就一直执行,称为死循环

语法格式:

loop

 代码

end loop;

示例:

//暂停1秒 输出1

delimiter  //

create proucedure tarena.loop()

begin

declare i int default 1;

loop

select sleep(1),i;

end loop;

end //

delimiter;

//调用后就死循环

call tarena.loop();

ctrl+C也结束不了,只有另开一个终端,进入数据库

在mysql登录状态下,查看正在执行的命令

show processlist;

Id     User    Host      db     Command   Time   ...

 3    root     localhost tarena   Query       1      ...

在mysql登录状态下,终止正在执行的命令

kill 3;

repeat循环结构:

至少循环一次

因为先执行循环体,再判断条件

判断条件不成立时继续执行,判断条件成立时结束循环

语法格式:

repeat

  循环体

  until  判断条件

end  repeat;

示例:

//j的从2开始,先插入数据,然后判断j是否大于i,成立就跳出循环,否则就继续插入数据

delimiter  //

create proucedure tarena.repeat_pro( in i int )

begin

declare j int default 1;

  repeat

set j=j+1;

insert into tarena.deprtments(dept_name) values(‘sales’);

until j>i;

 end repeat;

end //

delimiter;

循环控制命令

leave   跳出循环,相当于break

iterate   终止当前循环并开始下次循环,相当于continue 

格式:

leave 循环名

iterate 循环名  

给循环定义名字

名称:while 判断条件 do

  代码

end while 名称;

示例:

//直接跳出循环,select命令都没执行

delimiter  //

create proucedure tarena.p2()

begin

xyz:loop

  leave xyz;

select sleep(1);

select “one”;

end loop xyz;

end //

delimiter;

//j=5就结束本次循环

delimiter  //

create proucedure tarena.p3()

begin

declare j int default 1;

zzz:while j<=i do

  if j=5 then

    set j=j+1;

    iterate zzz;

  end if

  select j;

  set j=j+1;

end while zzz;

end //

delimiter;

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐