1. 流程控制的使用
存储过程和函数中可以使用流程控制语句来控制语句的执行。mysql中可以使用if语句、case语句、loop语句、leave语句、iterate语句、repeat语句和while语句来进行流程控制。
(1) if语句
if语句用来进行条件判断。语法:
if search_condition then statement_list
[elseif search_condition then statement_list]…
[else statement_list]
end if;
search_condition:参数表示条件判断语句;
statement_list:参数表示不同条件的执行语句。
示例:该示例根据age与20的大小关系来执行不同的set语句。如果age>20,那么将count1的值加1;如果age值等于20,那么将count2的值加1;其它情况将count3的值加1。if语句都用end if来结束。
if age>20 then set @count=@count1+1;
elseif age=20 then @couunt2=@count2+1;
else @count3=@count3+1;
end if;
(2) case语句
case语句也用来进行条件判断。语法1:
case case_value
when when_value then statement_list
[when when_value then statement_list]…
[else statement_list]
end case
case_value:参数表示条件判断的变量;
when_value:参数表示变量的取值;
statement_list:参数表示不同when_value值的执行语句。
case语句的另一种形式。语法2:
case
when search_condition then statement_list
[when search_condition then statement_list]…
[else statement_list]
end case;
示例:如果age的值为20,count1的值加1;否则count2的值加1;case语句都要使用end case结束;
case age
when 20 then set @count1=@count1+1;
else set @count2=@count2+1;
end case;
另一种形式:
case
when age=20 then set @count1=@count1+1;
else set @count2=@count2+1;
end case;
(3) loop语句
loop语句可以是某些特定的语句重复执行,实现一个简单的循环。但是loop语句本身没有停止循环的语句,必须是遇到leave语句才能停止循环。语法:
[begin_label:]loop
statement_list
end loop [end_label]
begin_label和end_label:参数分别表示循环开始和结束的标志,这两个标志必须相同,且都可以省略;
statement_list:参数表示需要执行的循环语句;
示例:
add_num:loop
set @count=@count+1;
end loop add_num;
该示例执行count+1的操作。因为没有跳出循环语句,这个循环是一个死循环。
(4) leave语句
leave语句主要用于跳出循环控制。语法:
leave label
label参数表示循环的标志。
示例:leave语句
add_num:loop
set @count=@count+1;
if @count=100 then
leave add_num;
end loop add_num;
该示例循环执行count+1的操作。当count的值等于100时,则leave语句跳出循环。
(5) iterate语句
iterate语句也是跳出循环的语句。但是,iterate语句是跳出本次循环,然后直接进入下一次循环。语法:
iterate leave
leave:参数表示循环的标志
示例:iterate语句
add_num:loop
set @count=@count+1;
if @count=100 then
leave add_num;
else if mod(@count,3)=0 then
iterate add_num;
select * from employee;
end loop add_num;
该示例循环执行count+1的操作,count值为100时结束循环。如果count的值能够整除3,则跳出本次循环,不再执行select语句;
注意:leave语句和iterate语句都是用来跳出循环,两者功能不同。leave语句跳出整个循环,然后执行循环后面的语句。而iterate语句是跳出本次循环,然后进入下一次循环。
(6) repeat语句
repeat语句是有条件控制的循环语句。当满足特定条件时,就会跳出循环语句。
语法:
[begin_label:]repeat
statement_list
until search_condition
end repeat [end_label]
statement_list:参数表示循环的执行语句;
search_coondition:参数表示结束循环的条件,满足该条件时循环结束。
示例:下面是iterate语句的一个示例:
repeat
set @count=@count+1;
until @count=100;
end repeat;
该示例循环执行count+1的操作,count值为100时结束循环。repeat循环都用end repeat结束。
(7) while语句
while语句也是有条件控制的循环语句。但while语句和repeat语句是不一样的。while语句是当满足条件时,执行循环内的语句。语法:
[begin_label:]while search_condition do
statement_list
end while[end_label]
search_condition:参数表示循环执行的条件,满足该条件时循环执行;
statement_list:蚕食表示循环的执行语句。
示例:下面是iterate语句
while @count<100 do
set @count=@count+1;
end while;
该示例执行的是count+1的操作,count值小于100时执行循环。如果count值等于100了,则跳出循环。while循环需要end while来结束。
一.调用存储过程和函数
存储过程和存储函数都是存储在服务器端的SQL语句的集合。要使用这些已经定义好的存储过程和存储函数就需要调用的方式来实现。存储过程是通过call语句来调用的。而存储韩式的使用方法和mysql内部函数的使用方法是一样的。执行存储过程和存储函数需要execute权限。execute权限的信息存储在information_schema数据库下面的user_privileges表中。
(1) 调用存储过程
mysql中用call来调用存储过程。调用存储过程后,数据库系统将执行存储过程中的语句。然后,将结果返回给输出值。call语法:
call sp_name([parameter[,…]]);
sp_name是存储过程的名称;paramter是指存储过程的参数;
示例:下面定义一个存储过程,然后调用存储过程。
//创建存储过程
查看一下存储过程
//调用存储过程及结果
使用call语句来调用存储过程;使用select语句来查询存储过程的输出值。