- 論壇徽章:
- 0
|
IF, CASE, LOOP, WHILE, ITERATE, 及 LEAVE 構(gòu)造被完全實現(xiàn)。
這些構(gòu)造可能每個包含要么一個單獨語句,要么是使用BEGIN ... END復(fù)合語句的一塊語句。構(gòu)造可以被嵌套。
目前還不支持FOR循環(huán)。
20.2.12.1. IF語句IF search_condition THEN statement_list [ELSEIF search_condition THEN statement_list] ... [ELSE statement_list]END IF
IF實現(xiàn)了一個基本的條件構(gòu)造。如果search_condition求值為真,相應(yīng)的SQL語句列表被執(zhí)行。如果沒有search_condition匹配,在ELSE子句里的語句列表被執(zhí)行。statement_list可以包括一個或多個語句。
請注意,也有一個IF() 函數(shù),它不同于這里描述的IF語句。請參閱
12.2節(jié),“
控制流程函數(shù)”
。
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語句實現(xiàn)一個復(fù)雜的條件構(gòu)造。如果search_condition 求值為真,相應(yīng)的SQL被執(zhí)行。如果沒有搜索條件匹配,在ELSE子句里的語句被執(zhí)行。
注意:這里介紹的用在存儲程序里的CASE語句與
12.2節(jié),“
控制流程函數(shù)”
里描述的SQL CASE表達式的CASE語句有輕微不同。這里的CASE語句不能有ELSE NULL子句,并且用END CASE替代END來終止。
20.2.12.3. LOOP語句[begin_label:] LOOP statement_listEND LOOP [end_label]
LOOP允許某特定語句或語句群的重復(fù)執(zhí)行,實現(xiàn)一個簡單的循環(huán)構(gòu)造。在循環(huán)內(nèi)的語句一直重復(fù)直循環(huán)被退出,退出通常伴隨著一個LEAVE 語句。
LOOP語句可以被標(biāo)注。除非begin_label存在,否則end_label不能被給出,并且如果兩者都出現(xiàn),它們必須是同樣的。
20.2.12.4. LEAVE語句LEAVE label
這個語句被用來退出任何被標(biāo)注的流程控制構(gòu)造。它和BEGIN ... END或循環(huán)一起被使用。
20.2.12.5. ITERATE語句ITERATE label
ITERATE只可以出現(xiàn)在LOOP, REPEAT, 和WHILE語句內(nèi)。ITERATE意思為:“再次循環(huán)!
例如:
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語句內(nèi)的語句或語句群被重復(fù),直至search_condition 為真。
REPEAT 語句可以被標(biāo)注。 除非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語句內(nèi)的語句或語句群被重復(fù),直至search_condition 為真。
WHILE語句可以被標(biāo)注。 除非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 |
|