一、条件语句
(1) IF条件语句
语法:
IF search_condition THEN
statement_list
ELSE
statement_list
END IF;
例:比较两个数大小
DELIMITER//
CREATE PROCEDURE test_procedure(i int,j int)
BEGIN
DECLARE s varchar(16);
IF ij then
set s='i>j';
else
set s='i=j';
END IF;
SELECT s;
END
//
DELIMITER;
调用:call test_procedure(3,6);
(2)CASE语句
语法:
CASE case_value
WHEN when_value THEN
statement_list
ELSE
statement_list
END CASE;
例:比较两个数大小
DELIMITER//
CREATE PROCEDURE test_procedure(i int,j int)
BEGIN
DECLARE s varchar(16);
case when i-j<0 then
set s='i0 then
set s='i>j';
else
set s='i=j';
end case;
SELECT s;
END
//
DELIMITER;
调用:call test_procedure(3,6);
二、循环语句
(1)LOOP循环
语法:
label: LOOP
statement_list
IF exit_condition THEN
LEAVE label;
END IF;
END LOOP label;
例:存储过程(累加功能)
DELIMITER//
CREATE PROCEDURE test_procedure(n int)
BEGIN
DECLARE s int;
DECLARE i int;
set s=0,i=1;
loop_label:LOOP
IF i<=n THEN
set s=s+i;
set i=i+1;
ELSE
LEAVE loop_label;
END IF;
END LOOP;
SELECT s;
END
//
DELIMITER;
调用:call test_procedure(5);
(2)WHILE循环,满足条件时执行循环体(先检查条件是否满足再进行操作)
语法:
WHILE search_condition DO
statement_list
END WHILE;
例:存储过程(累加功能)
DELIMITER//
CREATE PROCEDURE test_procedure(n int)
BEGIN
DECLARE s int;
DECLARE i int;
set s=0,i=1;
WHILE i<=n DO
set s=s+i;
set i=i+1;
END WHILE;
SELECT s;
END
//
DELIMITER;
调用:call test_procedure(5);
(3)REPEAT循坏,满足条件时跳出循环(执行操作后检查条件是否满足)
语法:
REPEAT
statement_list
UNTIL search_condition
END REPEAT;
例:存储过程(累加功能)
DELIMITER//
CREATE PROCEDURE test_procedure(n int)
BEGIN
DECLARE s int;
DECLARE i int;
set s=0,i=1;
REPEAT
set s=s+i;
set i=i+1;
UNTIL i>n
END REPEAT;
SELECT s;
END
//
DELIMITER;
调用:call test_procedure(5);
(4)ITERATE迭代:通过引用复合语句的标号,来从新开始复合语句
例:存储过程(累加功能)
DELIMITER//
CREATE PROCEDURE test_procedure(n int)
BEGIN
DECLARE s int DEFAULT 0;
DECLARE i int DEFAULT 1;
lables_loop:LOOP
set s=s+i;
set i=i+1;
IF i<=n then
iterate lables_loop;
end if;
if i>n then
leave lables_loop;
end if;
END LOOP;
SELECT s;
END
//
DELIMITER;
调用:call test_procedure(5);
注:MySQL的LOOP, LEAVE 和ITERATE语句(类似Continue、Break的写法)
和REPEAT和while语句不同,LOOP、LEAVE、ITERATE更像其他编程语言中的goto语句。
LOOP要设定一个label指定循环的开始位置,而LEAVE则像其他语言中的Break会离开LOOP指定的块,
iterate则像其他语言中的Continue会再次回到LOOP开始的语句。
(5)lables标签:可以用在begin、repeat、while或loop语句前,语句标号只能在合法的语句前使用,可以跳出循环,使运行指令达到复合语句的最后一步