Resumo : neste tutorial, você aprenderá como usar LOOP
a instrução MySQL para executar um bloco de código repetidamente com base em uma condição.
Introdução à instrução MySQL LOOP
A LOOP
instrução permite executar uma ou mais instruções repetidamente.
Aqui está a sintaxe básica da LOOP
instrução:
[begin_label:] LOOP
statements;
END LOOP [end_label]
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O LOOP
pode ter rótulos opcionais no início e no final do bloco.
Normalmente, você encerra o loop quando uma condição é verdadeira usando IF e LEAVE
instruções como a seguir:
[label]: LOOP
...
-- terminate the loop
IF condition THEN
LEAVE [label];
END IF;
...
END LOOP;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O loop termina quando a LEAVE
instrução é alcançada.
Além disso, você pode usar a ITERATE
instrução para pular a iteração atual e iniciar uma nova:
[label]: LOOP
...
-- terminate the loop
IF condition THEN
ITERATE [label];
END IF;
...
END LOOP;
Linguagem de código: CSS ( css )
Observe que a LEAVE
instrução funciona de forma semelhante à break
instrução, enquanto a ITERATE
instrução funciona de forma equivalente à continue
instrução em outras linguagens de programação como PHP, C# e Java.
Exemplo de instrução MySQL LOOP
Primeiro, crie uma tabela chamada calendars
:
CREATE TABLE calendars (
date DATE PRIMARY KEY,
month INT NOT NULL,
quarter INT NOT NULL,
year INT NOT NULL
);
Linguagem de código: PHP ( php )
A calendars
tabela possui quatro colunas:
date
– armazene a data única.month
– armazenar o mês da data.quarter
– armazene o trimestre da data.year
– armazena o ano da data.
Segundo, defina um procedimento armazenado fillDates
que insira linhas na calendars
tabela:
DELIMITER //
CREATE PROCEDURE fillDates(
IN startDate DATE,
IN endDate DATE
)
BEGIN
DECLARE currentDate DATE DEFAULT startDate;
insert_date: LOOP
-- increase date by one day
SET currentDate = DATE_ADD(currentDate, INTERVAL 1 DAY);
-- leave the loop if the current date is after the end date
IF currentDate > endDate THEN
LEAVE insert_date;
END IF;
-- insert date into the table
INSERT INTO calendars(date, month, quarter, year)
VALUES(currentDate, MONTH(currentDate), QUARTER(currentDate), YEAR(currentDate));
END LOOP;
END //
DELIMITER ;
Linguagem de código: PHP ( php )
O procedimento armazenado usa dois parâmetros de entrada startDate
e endDate
, representando o início e o fim do intervalo de datas.
O procedimento armazenado usa um loop, incrementando o valor currentDate
em um dia em cada iteração até atingir o valor endDate
.
Durante cada iteração, o procedimento armazenado insere a data atual na tabela de calendários, juntamente com as informações correspondentes de mês, trimestre e ano.
O loop é encerrado quando a data atual excede a data de término especificada.
Terceiro, insira as datas de January 1st, 2024
até December 31st, 2024
na calendars
tabela chamando o fillDates
procedimento armazenado:
CALL fillDates('2024-01-01','2024-12-31');
Linguagem de código: JavaScript ( javascript )
Por fim, recupere o número de linhas da calendars
tabela para verificar as inserções:
SELECT COUNT(*) FROM calendars;
Saída:
+----------+
| COUNT(*) |
+----------+
| 365 |
+----------+
1 row in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
E recupere algumas linhas de amostra da calendars
tabela:
SELECT
*
FROM
calendars
ORDER BY
date DESC
LIMIT
5;
Saída:
+------------+-------+---------+------+
| date | month | quarter | year |
+------------+-------+---------+------+
| 2024-12-31 | 12 | 4 | 2024 |
| 2024-12-30 | 12 | 4 | 2024 |
| 2024-12-29 | 12 | 4 | 2024 |
| 2024-12-28 | 12 | 4 | 2024 |
| 2024-12-27 | 12 | 4 | 2024 |
+------------+-------+---------+------+
5 rows in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
Observe que você pode usar colunas geradas para gerar automaticamente os dados para as colunas month
, quarter
e year
com base nos valores da date
coluna.
Resumo
- Use a
LOOP
instrução MySQL para executar um bloco de código repetidamente.