- 论坛徽章:
- 0
|
IF, CASE, LOOP, WHILE, ITERATE, 及 LEAVE 构造被完全实现。
这些构造可能每个包含要么一个单独语句,要么是使用BEGIN ... END复合语句的一块语句。构造可以被嵌套。
目前还不支持FOR循环。
20.2.12.1. IF语句IF search_condition THEN statement_list [ELSEIF search_condition THEN statement_list] ... [ELSE statement_list]END IF
IF实现了一个基本的条件构造。如果search_condition求值为真,相应的SQL语句列表被执行。如果没有search_condition匹配,在ELSE子句里的语句列表被执行。statement_list可以包括一个或多个语句。
请注意,也有一个IF() 函数,它不同于这里描述的IF语句。请参阅
12.2节,“
控制流程函数”
。
20.2.12.2. CASE语句CASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_list] ... [ELSE statement_list]END CASE
Or:
CASE WHEN search_condition THEN statement_list [WHEN search_condition THEN statement_list] ... [ELSE statement_list]END CASE
存储程序的CASE语句实现一个复杂的条件构造。如果search_condition 求值为真,相应的SQL被执行。如果没有搜索条件匹配,在ELSE子句里的语句被执行。
注意:这里介绍的用在存储程序里的CASE语句与
12.2节,“
控制流程函数”
里描述的SQL CASE表达式的CASE语句有轻微不同。这里的CASE语句不能有ELSE NULL子句,并且用END CASE替代END来终止。
20.2.12.3. LOOP语句[begin_label:] LOOP statement_listEND LOOP [end_label]
LOOP允许某特定语句或语句群的重复执行,实现一个简单的循环构造。在循环内的语句一直重复直循环被退出,退出通常伴随着一个LEAVE 语句。
LOOP语句可以被标注。除非begin_label存在,否则end_label不能被给出,并且如果两者都出现,它们必须是同样的。
20.2.12.4. LEAVE语句LEAVE label
这个语句被用来退出任何被标注的流程控制构造。它和BEGIN ... END或循环一起被使用。
20.2.12.5. ITERATE语句ITERATE label
ITERATE只可以出现在LOOP, REPEAT, 和WHILE语句内。ITERATE意思为:“再次循环。”
例如:
CREATE PROCEDURE doiterate(p1 INT)BEGIN label1: LOOP SET p1 = p1 + 1; IF p1 LEAVE label1; END LOOP label1; SET @x = p1;END
20.2.12.6. REPEAT语句[begin_label:] REPEAT statement_listUNTIL search_conditionEND REPEAT [end_label]
REPEAT语句内的语句或语句群被重复,直至search_condition 为真。
REPEAT 语句可以被标注。 除非begin_label也存在,end_label才能被用,如果两者都存在,它们必须是一样的。
例如:
mysql> delimiter // mysql> CREATE PROCEDURE dorepeat(p1 INT) -> BEGIN -> SET @x = 0; -> REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT; -> END -> //Query OK, 0 rows affected (0.00 sec) mysql> CALL dorepeat(1000)//Query OK, 0 rows affected (0.00 sec) mysql> SELECT @x//+------+| @x |+------+| 1001 |+------+1 row in set (0.00 sec)
20.2.12.7. WHILE语句[begin_label:] WHILE search_condition DO statement_listEND WHILE [end_label]
WHILE语句内的语句或语句群被重复,直至search_condition 为真。
WHILE语句可以被标注。 除非begin_label也存在,end_label才能被用,如果两者都存在,它们必须是一样的。
例如:
CREATE PROCEDURE dowhile()BEGIN DECLARE v1 INT DEFAULT 5; WHILE v1 > 0 DO ... SET v1 = v1 - 1; END WHILE;END 资料来源于:《MySQL 5.1参考手册》
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/50618/showart_2106860.html |
|