在mysql中,常见的过程式sql语句可以用在一个存储过程体中。
其中包括:if语句、case语句、loop语句、while语句、repeat语句、leave语句和iterate语句,它们可以进行流程控制。
1、if语句
if语句用来进行条件判断,根据不同的条件执行不同的操作。
该语句在执行时首先判断if后的条件是否为真,则执行then后的语句,如果为假则继续判断if语句直到为真为止,当以上都不满足时则执行else语句后的内容。
if语句表示形式如下:
if condition then ... else condition then ... else ... end if
示例:使用if语句用来进行条件判断。
-- 创建存储过程 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; -- 调用存储过程 call example_if(2);
2、case语句
case语句为多分支语句结构,该语句首先从when后的value中查找与case后的value相等的值,如果查找到则执行该分支的内容,否则执行else后的内容。
case语句表示形式如下:
case value when value then ... when value then ... else ... end case
case语句另一种语法表示形式如下:
case when value then ... when value then ... else ... end case
示例:使用case语句用来进行条件判断。
-- 创建存储过程 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(5);
3、while循环语句
while循环语句执行时首先判断condition条件是否为真,如果是则执行循环体,否则退出循环。
该语法表示形式如下:
while condition do ... end while;
示例:使用while循环语句执行求前100的和。
-- 创建存储过程 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; -- 调用存储过程 call example_while(@sum); select @sum;
4、loop循环语句
loop循环没有内置的循环条件,但可以通过leave语句退出循环。
loop语句表示形式如下:
loop ... end loop
loop语句允许某特定语句或语句群的重复执行,实现一个简单的循环构造,在循环内的语句一直重复直至循环被退出,退出循环应用leave语句。
leave语句经常和begin...end或者循环一起使用,其表示形式如下:
leave label
label是语句中标注的名字,这个名字是自定义的。
示例:使用loop循环语句求前100的和。
-- 创建存储过程 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 -- 退出loop循环 leave loop_label; end if; end loop; set sum = s; end; -- 调用存储过程 call example_loop(@sum); select @sum;
5、repeat循环语句
repeat循环语句先执行一次循环体,之后判断condition条件是否为真,则退出循环,否则继续执行循环。
repeat语句表示形式如下:
repeat ... until condition end repeat
示例:使用repeat循环语句求前100的和。
-- 创建存储过程 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(@sum); select @sum;
6、iterate语句
iterate语句可以出现在loop、repeat和while语句内,其意为“再次循环”。
语句格式如下:
iterate label
该语句的格式与leave大同小异,区别在于:leave语句是离开一个循环,而iterate语句是重新开始一个循环。
示例:求10以内奇数值的和。
-- 创建存储过程 create procedure example_iterate(out sum int) begin declare i int default 0; declare s int default 0; loop_label:loop set i = i+1; if i > 10 then -- 退出整个循环 leave loop_label; end if; if (i mod 2) then set s = s+i; else -- 退出本次循环,继续下一个循环 iterate loop_label; end if; end loop; set sum = s; end; -- 调用存储过程 call example_iterate(@sum); select @sum;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论