当前位置:嗨网首页>书籍在线阅读

12-流程控制语句

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.4.4 流程控制语句

存储过程和自定义函数中使用流程控制来控制语句的执行。MySQL中用来构造控制流程的语句有:IF语句、CASE语句、LOOP语句、LEAVE语句、ITERATE语句、REPEAT语句和WHLE语句。本小节将详细讲解这些流程控制语句。

1.IF语句

IF语句用来进行条件判断,根据判断结果为TURE或FALSE执行不同的语句。其语法格式如下。

IF search_condition THEN statement_list [ELSEIF search_condition THEN statement_list] ... [ELSE statement_list] END IF

语法中的search_condition参数表示条件判断语句,如果该参数值为TRUE,执行相应的SQL语句,如果该参数值为假,则执行ELSE子句中的语句。statement_list参数表示不同条件的执行语句,可以包含一条或多条语句。

【范例9-15】

IF语句的示例,代码如下。

IF grade >=60 then Select'通过'; Else select'未通过'; End IF;

该示例判断grade的值,如果grade大于等于60,输出字符串“通过”,否则输出字符串“未通过”,IF语句都需要END IF来结束。

2.CASE语句

CASE语句也用来进行条件判断,可以实现比IF语句更为复杂的条件判断。CASE语句有两种基本形式,第一种基本形式如下。

CASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_list] ... [ELSE statement_list] END CASE

语法中的case_value参数表示条件判断的表达式,该表达式的值决定哪个WHEN子句被执行。when_value参数表示表达式可能的取值;如果某个when_value 表达式与case_value表达式的结果相同,则执行对应的THEN关键字后的statement_list中的语句。statement_list参数表示不同 when_value 值的执行语句。

CASE语句另一种形式的语法如下。

CASE WHEN search_condition THEN statement_list [WHEN search_condition THEN statement_list] .. [ELSE statement_list] END CASE

其中,search_condition参数表示条件判断语句;statement_list参数表示不同条件的执行语句。该语句中的WHEN语句将被逐条执行,若search_condition判断为真,则执行相应的THEN关键字后面的statement_list语句。如果没有条件匹配,ELSE子句后的语句将被执行。

【范例9-16】

下面是一个CASE语句的示例,代码如下。

CASE deptno When 1 then select '电脑部'; When 2 then select '财务部'; When 3 then select '营销部'; END CASE;

代码也可以是下面的写法。

Case When deptno=1 then select '电脑部'; When deptno=2 then select '财务部'; When deptno=3 then select '营销部'; END CASE;

3.LOOP语句

LOOP语句可以重复执行特定的语句,实现简单的循环。但是LOOP语句本身并不进行条件判断,没有停止循环的语句,必须使用LEAVE语句才能停止循环,跳出循环过程。LOOP语句的语法基本形式如下。

[begin_label:] LOOP statement_list END LOOP [end_label]

其中,begin_label参数和end_label参数分别表示循环开始和结束的标志,这两个标志必须相同,而且都可以省略;statement_list参数表示需要循环执行的语句。

【范例9-17】

下面是一个LOOP语句的示例,代码如下。

DECLARE ss int default 0; Add_sum:loop Set ss=ss+1; End loop add_sum;

该示例中执行的是ss加1的操作。循环中没有跳出循环的语句,所以该循环为死循环。

4.LEAVE语句

LEAVE语句主要用来跳出任何被标注的流程控制语句。其语法形式如下。

LEAVE label

其中,label参数表示循环的标志。LEAVE和循环或BEGIN…END语句一起使用。

【范例9-18】

下面是一个LEAVE语句跳出循环语句的示例,代码如下。

DECLARE ss int default 0; Add_sum:loop Set ss=ss+1; IF ss>100 then leave add_sum; End if; End loop add_sum;

该示例在范例9-8的基础上,在循环体内增加了LEAVE跳出循环的语句,在ss大于100后跳出循环。

5.ITERATE语句

ITERATE语句也是用来跳出循环的语句。但ITERATE只可以出现在LOOP、REPEAT和WHILE语句内。ITERATE语句是跳出本次循环,然后直接进入下一次循环。ITERATE意思为“再次循环”。

ITERATE语句的基本语法形式如下。

ITERATE label

其中,label参数表示循环的标志。

【范例9-19】

下面是一个ITERATE语句跳出循环语句的示例,代码如下。

CREATE PROCEDURE pp (a INT) BEGIN La: LOOP SET a =a + 1; IF a < 10 THEN ITERATE la; END IF; LEAVE la; END LOOP la; SET @x = a; END

其中,a变量为输入参数,在LOOP循环中,a值加1,IF 条件语句中进行判断,如果a值小于10,则使用ITERATE La跳出本次循环,又一次从头开始LOPP 循环;a值再次加1,若a大于等于10则ITERATE La语句不执行,执行下面的LEAVE La语句跳出整个循环语句。

提示 LEAVE语句和ITERATE语句都用来跳出循环语句,但两者的功能是不一样的。LEAVE语句是跳出整个循环,然后执行循环后面的程序。而ITERATE语句是跳出本次循环,然后进入下一次循环。使用这两个语句时一定要区分清楚。

6.REPEAT语句

REPEAT语句创建的是带条件判断的循环过程。循环语句每次执行完都会对表达式进行判断,若表达式为真,则结束循环,否则再次重复执行循环中的语句。当条件判断为真时,就会跳出循环语句。REPEAT语句的基本语法形式如下。

[begin_label:] REPEAT statement_list UNTIL search_condition END REPEAT [end_label]

其中,begin_label和end_label为开始标记和结束标记,两者均可以省略;statement_list参数表示循环的执行语句;search_condition参数表示结束循环的条件,该条件为真时结束跳出循环,该参数为假时,再次执行循环语句。

【范例9-20】

下面是一个ITERATE语句跳出循环语句的示例,代码如下。

Declare aa int default 0; REPEAT Set aa=aa+1; Until aa>=20; END REPEAT;

该示例循环中执行aa加1的操作。当aa的值小于20时,再次重复aa加1的操作,当aa值大于等于20时,条件判断表达式为真,则结束循环。

7.WHILE语句

WHILE语句也是有条件控制的循环语句。但WHILE语句和REPEAT语句是不同的。WHILE在执行语句时,先对条件表达式进行判断,若该条件表达式为真,则执行循环内的语句。否则,退出循环过程。WHILE语句的基本语法形式如下。

[begin_label:] WHILE search_condition DO statement_list END WHILE [end_label]

其中,begin_label和end_label为开始标记和结束标记,两者均可以省略;search_condition为条件判断表达式,若该条件判断表达式为真,则执行循环中的语句,否则退出循环。

【范例9-21】

下面是一个WHILE循环语句的示例,代码如下。

Declare aa int default 0; WHILE aa<=20 DO Set aa=aa+1 END WHIE;

该循环执行aa加1的操作,进入循环过程前,先进行aa值进行判断,若aa值小于等于20,则进入循环过程,执行循环过程中的语句。否则,退出循环过程。