十一. CASE语句
CASE case_value
WHEN when_value THEN statement_list [WHEN when_value THEN
statement_list] ... [ELSE statement_list] END CASEOr:
CASE WHEN search_condition THEN statement_list [WHEN
search_condition THEN statement_list] ... [ELSE statement_list]
END CASE
存储程序的CASE语句实现一个复杂的条件构造。如果search_condition 求值为真,相应的SQL被执行。如果没有搜索条件匹配,在ELSE子句里的语句被执行。
示例:
delimiter //CREATE
PROCEDURE p2 (IN parameter1 INT)BEGIN DECLARE variable1 INT; SET
variable1 = parameter1 + 1; CASE variable1 WHEN 0 THEN
INSERT INTO t VALUES (17); WHEN 1 THEN INSERT INTO t VALUES
(18); ELSE INSERT INTO t VALUES (19); END CASE;END//
十二. 循环语句
WHILE … END
WHILE示例:delimiter //CREATE PROCEDURE p4 ()BEGIN DECLARE v INT;
SET v = 0; WHILE v < 5 DO INSERT INTO t VALUES
(v); SET v = v + 1; END WHILE;END //
LOOP … END LOOP示例:CREATE
PROCEDURE p5 ()BEGIN DECLARE v INT; SET v = 0; loop_label:
LOOP INSERT INTO t VALUES (v); SET v = v + 1; IF
v >= 5 THEN LEAVE loop_label; END IF; END
LOOP;END //[begin_label:] LOOP statement_listEND LOOP
[end_label]LOOP允许某特定语句或语句群的重复执行,实现一个简单的循环构造。在循环内的语句一直重复直到循环被退出,退出通常伴随着一个LEAVE
语句。
十三. 补充:迭代(ITERATE)语句
CREATE PROCEDURE p7
()BEGIN DECLARE v INT; SET v = 0; loop_label: LOOP
IF v = 3 THEN SET v = v + 1; ITERATE
loop_label; END IF; INSERT INTO t VALUES (v);
SET v = v + 1; IF v >= 5 THEN LEAVE
loop_label; END IF; END LOOP;END //
十四. 注释语法:
mysql存储过程可使用两种风格的注释双模杠:--,该风格一般用于单行注释c风格:/* 注释内容 */, 一般用于多行注释