7.2 流程控制语句
7.2.1 IF语句
delimiter //
create procedure example_if(in x int)
begin
if x=1 then
select 1;
elseif x=2 then
select 2;
else
select 3;
end if;
end
//
delimiter为定界符,将语句的结束标志设定为//,当执行到//时才会作为语句结束,这样整个储存过程就是一个完整的语句,定界符默认为;,修改后为避免麻烦最好修改回;。
调用该储存过程,输入参数为2
call example_if(2)//
7.2.2 CASE语句
delimiter //
create procedure example_case(in x int)
begin
case x
when 1 then select 1;
when 2 then select 2;
else select 3;
end case;
end
//
调用该储存过程
call example_case(3)//
7.2.3 WHILE循环语句
计算前100自然数的和
delimiter //
create procedure example_while(out sum int)
begin
declare i int default 1;
declare s int default 0;
while i<=100 do
set s=s+i;
set i=i+1;
end while;
set sum=s;
end
//
while后为条件,do与end while之间为循环体
调用该储存过程
call example_while(@s)//
select @s//
@s为out型变量(非官方理解),储存了数据,用select语句可以查看其值。
7.2.4 LOOP循环语句
计算前100自然数的和
delimiter //
create procedure example_loop(out sum int)
begin
declare i int default 1;
declare s int default 0;
loop_label:loop
set s=s+i;
set i=i+1;
if i>100 then
leave loop_label;
end if;
end loop;
set sum=s;
end
//
LOOP中没有循环条件,因此其会不断执行,为了跳出循环,可设置一个标签label,通过leave label;语句来退出循环。
调用存储过程
call example_loop(@s)//
select @s//
7.2.5 REPEAT循环
计算前100自然数的和,和do while类似
delimiter //
create procedure example_repeat(out sum int)
begin
declare i int default 1;
declare s int default 0;
repeat
set s=s+i;
set i=i+1;
until i>100
end repeat;
set sum=s;
end
//
call example_repeat(@s)//
select @s//
注:另外还有ITERATE label ,重新开始一个循环,存储过程没有for循环。