Resumo : neste tutorial, você aprenderá como usar a WHILE
instrução de loop do MySQL para executar uma ou mais instruções repetidamente, desde que uma condição seja verdadeira.
Introdução à instrução de loop WHILE do MySQL
O WHILE
loop é uma instrução de loop que executa um bloco de código repetidamente, desde que uma condição seja verdadeira.
Aqui está a sintaxe básica da WHILE
instrução:
[begin_label:] WHILE search_condition DO
statement_list
END WHILE [end_label]
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe:
Primeiro, especifique uma condição de pesquisa após a WHILE
palavra-chave.
O WHILE
verifica search_condition
no início de cada iteração.
Se o search_condition
for avaliado como TRUE
, o WHILE
executará statement_list
enquanto search_condition
for TRUE
.
O WHILE
loop é chamado de loop de pré-teste porque verifica search_condition
antes de ser statement_list
executado.
Segundo, coloque uma ou mais instruções que serão executadas entre DO
e END WHILE
.
Terceiro, defina rótulos opcionais para a WHILE
instrução no início e no final da construção do loop.
O fluxograma a seguir ilustra a WHILE
instrução de loop do MySQL:
Exemplo de instrução de loop WHILE do MySQL
Primeiro, crie uma tabela chamada calendars
que armazene a data, mês, trimestre e ano:
DROP TABLE IF EXISTS calendars;
CREATE TABLE calendars(
date DATE PRIMARY KEY,
month INT NOT NULL,
quarter INT NOT NULL,
year INT NOT NULL
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, crie um novo procedimento armazenado loadDates()
que insira datas na calendars
tabela:
DELIMITER $$
CREATE PROCEDURE loadDates(
startDate DATE,
day INT
)
BEGIN
DECLARE counter INT DEFAULT 0;
DECLARE currentDate DATE DEFAULT startDate;
WHILE counter <= day DO
CALL InsertCalendar(currentDate);
SET counter = counter + 1;
SET currentDate = DATE_ADD(currentDate ,INTERVAL 1 day);
END WHILE;
END$$
DELIMITER ;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O procedimento armazenado loadDates()
aceita dois argumentos:
startDate
é a data de início que inserimos nacalendars
tabela.day
é o número de dias que serão inseridos a partir destartDate
.
Examinando o procedimento armazenado loadDates()
No loadDates()
procedimento armazenado:
Primeiro, declare variáveis a counter
e currentDate
para manter valores imediatos. Os valores padrão de counter
e currentDate
são 0
e startDate
respectivamente.
Em seguida, verifique se counter
é menor que day
, se sim:
- Insira a data atual na
calendars
tabela. - Aumente em
counter
um ecurrentDate
em um dia usando aDATE_ADD()
função.
O WHILE
loop executa repetidamente a instrução INSERT para inserir datas na calendars
tabela até que counter
seja menor ou igual a day
.
Chamando o procedimento armazenado
Primeiro, chame o procedimento armazenado loadDates()
para inserir 365 linhas na calendars
tabela começando em January 1st 2024
.
CALL loadDates('2024-01-01',365);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, recupere as linhas da calendars
tabela para verificar as inserções:
SELECT
*
FROM
calendars
ORDER BY
date DESC ;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída parcial:
+------------+-------+---------+------+
| 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 |
...
Linguagem de código: texto simples ( texto simples )
Resumo
- Use
WHILE
o loop MySQL para executar uma ou mais instruções repetidamente, desde que uma condição seja verdadeira.