条件控制 IF条件:条件为真,执行 CASE条件:匹配到,执行 循环控制 WHILE循环:先判断后执行 REPEAT循环:先执行后判断 LOOP循环(死循环) LEAVE语句(离开) ITERATE语句:迭代,再次循环 RETURN语句:返回
注意:MySQL不支持FOR循环
一、条件控制:if语句、case语句
如果条件search_condition_1为true,则执行相应的then子句后面的语句列表statement_list_1;
如果条件search_condition_1不为true,则判断ELSEIF子句中的条件search_condition_2是否为true,如果为true,则执行相应的then子句后面的语句列表statement_list_2;
……
如果所有的条件都不为true,则执行ELSE子句后面的语句。
例1:创建过程,判断两个输入参数哪一个大
解析:输入的第一个参数对应p1,第二个对应p2,@ax用来接收输出变量p3;如果p1>p2,输出1;如果p1=p2,输出2;其他情况,输出3。
例2:创建过程,表示出players表和penalties表哪一个行数更多--->IF条件中允许包含标量子查询
1)simple case:简易case语句
case_value是一个表达式,该值和每个when子句中的when_value值进行相等比较:
①如果和某个when子句中的when_value值相等,则执行相应的then子句后面的语句statement_list;
②如果没有when_value值相等,则执行else子句后面的statement_list。
2)searched case:检索型case语句
对于每个when子句,判断后面的布尔表达式search_condition是否为true:
①如果某个when子句的条件为true,则执行相应的then子句后面的语句statement_list;
②如果所有的when子句的条件都不为true,则执行else后面的语句statement_list。
注意:
①如果在case中,没有一个when子句的比较结果为true,并且没有写else部分,那么就抛出异常:‘Case not found for CASE statement’;
②statement_list如果有多条语句,使用begin…end块包围起来(复合语句)。
二、循环控制:while循环、repeat循环、loop循环、leave语句、iterate语句
Tips:循环体结构
①条件
②SQL语句体
③程序体里面需要对条件中的变量进行处理
首先判断循环开始条件search_condition是否为true(循环结束条件):
如果为true,则执行循环体中的语句statement_list。每执行完一次,都要重新判断条件search_condition是否为true;
如果条件search_condition为false,则循环结束。
特点:
先判断,后执行
反复执行循环体中的语句statement_list,直到until条件search_condition 为true时,循环结束
先执行,后判断
@x:用户变量,直接使用“set @x=0;”就可以生成这么一个变量,不需要数据类型,在存储过程里定义的用户变量,存储过程外面可以访问,一直被保存。
反复执行循环体中的语句,直到循环结束;
循环的结束使用leave语句。
例:创建过程,等待指定的秒数后结束
作用:用来退出带标签的语句块或者循环
用处:用在 BEGIN ... END中或者循环中 (LOOP, REPEAT, WHILE)
例:创建过程,其中的一个语句块较早的结束
ITERATE label;
只能出现在循环LOOP、REPEAT和WHILE 中(有标签)
含义:跳出本次循环,开始一次新的循环
| @x |
本文转自zsdnr 51CTO博客,原文链接:http://blog.51cto.com/12942149/1949799,如需转载请自行联系原作者
+------+
| 10 |