1. 程式人生 > >MYSQL中的流程控制語句

MYSQL中的流程控制語句

一、條件語句
(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語句前,語句標號只能在合法的語句前使用,可以跳出迴圈,使執行指令達到複合語句的最後一步