免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2367 | 回复: 0
打印 上一主题 下一主题

Mysql流程控制构造 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-29 21:06 |只看该作者 |倒序浏览

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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP