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 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文の前に使用できます.文のラベルは合法的な文の前にしか使用できません.ループを飛び出して、実行命令を複合文の最後のステップに達させることができます.