En esto, cubriremos la descripción general de MySQL WHILE Loop y luego cubriremos el algoritmo de cada ejemplo y luego veremos el análisis de cada ejemplo. Discutámoslo uno por uno.
Introducción: la declaración de bucle WHILE de
MySQL se utiliza para ejecutar una o más declaraciones una y otra vez, siempre que una condición sea verdadera. Podemos usar el ciclo cuando necesitamos ejecutar la tarea con repetición mientras la condición es verdadera.
Nota:
use una declaración WHILE LOOP en caso de que no esté seguro de la cantidad de veces que desea que se ejecute el cuerpo del ciclo. Dado que la condición MIENTRAS se evalúa antes de ingresar al ciclo, es posible que el cuerpo del ciclo no se ejecute ni una sola vez.
Sintaxis:
[label_name:] WHILE condition DO statements_list END WHILE [label_name]
Significado de la etiqueta de sintaxis –
- Label_name – label_name
es opcional, es un nombre relacionado con el bucle WHILE. - Condición:
la condición se prueba y cada una se somete a través del ciclo WHILE. Si la condición da como resultado VERDADERO, se ejecuta la lista de sentencias, o si la condición da como resultado FALSO, el ciclo WHILE finaliza. - Lista de declaraciones
: la lista de declaraciones es que la lista de declaraciones que se ejecutarán soportará el bucle WHILE.
Diagrama de bloques del ciclo while:
Ejemplos de MySQL WHILE Loop:
Ejemplo-1:
Nos permite crear una función usando un ciclo while.
DELIMITER $$ CREATE FUNCTION GeekInc ( value INT ) RETURNS INT BEGIN DECLARE inc INT; SET inc = 0; label: WHILE inc <= 30000 DO SET inc = inc + value; END WHILE label; RETURN inc; END; $$ DELIMITER ;
Análisis –
- El valor es la entrada para la función GeekInc.
- inc se declara y se establece en 0.
- Mientras que inc es menor que e igual a 3000, establecerá inc en inc + valor.
Para verificar la salida, use el siguiente comando que se proporciona a continuación.
CALL GeekInc(10000);
Producción –
0, 10000, 20000, 30000
Ejemplo-2:
Vamos a crear un procedimiento usando un ciclo while.
DELIMITER $$ CREATE procedure while_ex() block: BEGIN declare value VARCHAR(20) default ' ' ; declare num INT default 0; SET num = 1; WHILE num <= 5 DO SET value = CONCAT(value, num ,',' ); SET num = num + 1; END WHILE block; select value ; END $$ DELIMITER ;
Análisis –
- cree el procedimiento while_ex y declare el valor y el número.
- establecer num en 1, mientras que num es igual o menor que 5 do
- establecer valor igual a la concatenación de valor y num.
Para verificar la salida, use el siguiente comando que se proporciona a continuación.
call while_ex();
Producción –
valor |
---|
1,2,3,4,5 |
Ejemplo-3:
Vamos a crear una tabla «Test_Cal» que tiene fechas de la siguiente manera.
CREATE TABLE Test_Cal( t_in INT AUTO_INCREMENT, fulldate DATE UNIQUE, day TINYINT NOT NULL, month TINYINT NOT NULL, PRIMARY KEY(id) );
Ahora, cree un procedimiento almacenado para insertar datos en la tabla de la siguiente manera.
DELIMITER $$ CREATE PROCEDURE InsertCal(dt DATE) BEGIN INSERT INTO Test_Cal( fulldate, day, month ) VALUES(dt, EXTRACT(DAY FROM dt), EXTRACT(MONTH FROM dt) ); END$$ DELIMITER ;
Ahora cree el procedimiento almacenado LoadCal() que actualiza la cantidad de días a partir de una fecha de inicio en la tabla.
DELIMITER $$ CREATE PROCEDURE LoadCal( startDate DATE, day INT ) BEGIN DECLARE counter INT DEFAULT 1; DECLARE dt DATE DEFAULT startDate; WHILE counter <= day DO CALL InsertCal(dt); SET counter = counter + 1; SET dt = DATE_ADD(dt,INTERVAL 1 day); END WHILE; END$$ DELIMITER ;
Análisis –
- El procedimiento almacenado LoadCal() tiene dos parámetros: startDate y day.
- Primero, declare un contador y variables dt para guardar valores.
- Luego, verifique si el contador es menor o igual al día, en caso afirmativo:
- Ejecute el procedimiento almacenado Inertial() para insertar una fila en la tabla Test_Cal.
- Un aumento en el contador en 1 aumenta el dt en 1 día usando DATE_ADD().
- El bucle WHILE inserta la fecha en la tabla hasta que el contador es el mismo que el día.
Para verificar la salida, use el siguiente comando que se proporciona a continuación.
CALL LoadCal('2021-01-01',31); select * from Test_Cal where tid < 10 ;
Producción –
t_id | fecha completa | día | mes |
---|---|---|---|
1 | 2021-01-01 | 1 | 1 |
2 | 2021-01-02 | 2 | 1 |
3 | 2021-01-03 | 3 | 1 |
4 | 2021-01-04 | 4 | 1 |
5 | 2021-01-05 | 5 | 1 |
6 | 2021-01-06 | 6 | 1 |
7 | 2021-01-07 | 7 | 1 |
8 | 2021-01-08 | 8 | 1 |
9 | 2021-01-09 | 9 | 1 |
Publicación traducida automáticamente
Artículo escrito por khushboogoyal499 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA