MYSQL中的流程控制語句
阿新 • • 發佈:2018-12-10
一、條件語句
(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 i<j THEN set s='i<j'; elseif i>j 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='i<j'; when i-j>0 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語句前,語句標號只能在合法的語句前使用,可以跳出迴圈,使執行指令達到複合語句的最後一步