Hay tres bucles estándar en la declaración de procedimiento almacenado de MySQL: WHILE loop, LOOP loop y REPEAT loop. También hay un método de bucle no estándar: GOTO, pero es mejor no usar este método de bucle, es fácil causar confusión en el programa, aquí hay una buena introducción.
El formato de estas declaraciones de bucle es el siguiente:
MIENTRAS ... HACER ... FINALIZAR MIENTRAS
REPETIR ... HASTA FINALIZAR REPETIR
LOOP ... FINALIZAR LOOP
GOTO.
Primero escribamos un ejemplo usando el primer bucle.
PROCEDIMIENTO DE GOTA SI EXISTE `pro10`; DELIMITER $$ CREATE PROCEDURE `pro10` () COMENZAR -定义变量 DECLARE v_i int DEFAULT sin signo 0; MIENTRAS que v_i <5 SELECCIONE v_i; SET v_i = v_i + 1; FINAL MIENTRAS; FIN $$ DELIMITADOR; LLAMAR a pro10 ();
Echemos un vistazo a la segunda instrucción de control de bucle REPEAT ... END REPEAT. Use la instrucción de control de bucle REPEAT para escribir el siguiente procedimiento almacenado:
PROCEDIMIENTO DE GOTA SI EXISTE `pro11`; DELIMITER $$ CREATE PROCEDURE `pro11` () COMENZAR -定义变量 DECLARE v_i int DEFAULT sin signo 0; REPETIR SELECCIONAR v_i; SET v_i = v_i + 1; HASTA v_i> = 5 END REPEAT; FIN $$ DELIMITADOR; LLAMAR a pro11 ();
Echemos un vistazo a la declaración de control del tercer bucle LOOP ...... END LOOP. Escriba un programa de procedimiento almacenado de la siguiente manera:
PROCEDIMIENTO DE GOTA SI EXISTE `pro12`; DELIMITER $$ CREATE PROCEDURE `pro12` () COMENZAR -定义变量 DECLARE v_i int DEFAULT sin signo 0; LOOP_LABEL: LOOP SELECT v_i; SET v_i = v_i + 1; SI v_i> = 5 LUEGO DEJE LOOP_LABEL; TERMINARA SI; END LOOP; FIN $$ DELIMITADOR; LLAMAR a pro12 ();
PROCEDIMIENTO DE GOTA SI EXISTE `pro13`; DELIMITER $$ CREATE PROCEDURE `pro13` () COMENZAR -定义变量 DECLARE v_i int DEFAULT sin signo 0; LOOP_LABEL: LOOP IF v_i = 3 LUEGO SET v_i = v_i + 1; ITERATE LOOP_LABEL; # => continuar FINALIZAR SI; SELECCIONE v_i; SET v_i = v_i + 1; SI v_i> = 5 LUEGO DEJE LOOP_LABEL; # => descanso; TERMINARA SI; END LOOP; FIN $$ DELIMITADOR; LLAMAR a pro13 ();