MySQLストアドプロシージャステートメントには、WHILEループ、LOOPループ、REPEATループの3つの標準ループがあります。非標準のループ方法GOTOもありますが、このループ方法は使用しないのが最善です。プログラムで混乱を招きやすいので、ここで紹介します。
これらのループステートメントの形式は次のとおりです
。WHILE... DO ... END WHILE
REPEAT ... UNTIL END REPEAT
LOOP ... END LOOP
GOTO。
最初に、最初のループを使用して例を記述しましょう。
DROP PROCEDURE IF EXISTS `pro10`; DELIMITER $$ PROCEDURE `pro10`を(CREATE)は BEGIN -定义变量 DECLAREのv_iをint型符号なしDEFAULT 0; WHILE v_i <5 DO SELECT v_i; SET v_i = v_i + 1; END WHILE; END $$ DELIMITER; CALL pro10();
2番目のループ制御命令REPEAT ... END REPEATを見てみましょう。REPEATループ制御ステートメントを使用して、次のストアドプロシージャを記述します。
DROP PROCEDURE IF EXISTS `pro11`; DELIMITER $$ PROCEDURE `pro11`を(CREATE)は BEGIN -定义变量 DECLAREのv_iをint型符号なしDEFAULT 0; REPEAT SELECT v_i; SET v_i = v_i + 1; UNTIL v_i> = 5 END REPEAT; END $$ DELIMITER; CALL pro11();
3番目のループ制御ステートメントLOOP ...... END LOOPを見てみましょう。ストアドプロシージャプログラムを次のように記述します。
DROP PROCEDURE IF EXISTS `pro12`; DELIMITER $$ PROCEDURE `pro12`を(CREATE)は BEGIN -定义变量 DECLAREのv_iをint型符号なしDEFAULT 0; LOOP_LABEL:LOOP SELECT v_i; SET v_i = v_i + 1; IF v_i> = 5 THEN LEAVE LOOP_LABEL; 終了IF; ループ終了; END $$ DELIMITER; CALL pro12();
DROP PROCEDURE IF EXISTS `pro13`; DELIMITER $$ PROCEDURE `pro13`を(CREATE)は BEGIN -定义变量 DECLAREのv_iをint型符号なしDEFAULT 0; LOOP_LABEL:LOOP IF v_i = 3 THEN SET v_i = v_i + 1; ITERATE LOOP_LABEL; #=> END IFを続行します。 SELECT v_i; SET v_i = v_i + 1; IF v_i> = 5 THEN LEAVE LOOP_LABEL; #=>休憩; 終了IF; ループ終了; END $$ DELIMITER; CALL pro13();