Loop WHILE do MySQL

Resumo : neste tutorial, você aprenderá como usar a WHILEinstruçã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 WHILEloop é 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 WHILEinstruçã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 WHILEpalavra-chave.

O WHILEverifica search_conditionno início de cada iteração.

Se o search_conditionfor avaliado como TRUE, o WHILEexecutará statement_listenquanto search_conditionfor TRUE.

O WHILEloop é chamado de loop de pré-teste porque verifica search_conditionantes de ser statement_listexecutado.

Segundo, coloque uma ou mais instruções que serão executadas entre DOe END WHILE.

Terceiro, defina rótulos opcionais para a WHILEinstrução no início e no final da construção do loop.

O fluxograma a seguir ilustra a WHILEinstrução de loop do MySQL:

Loop WHILE do MySQL

Exemplo de instrução de loop WHILE do MySQL

Primeiro, crie uma tabela chamada calendarsque 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 calendarstabela:

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 na calendarstabela.
  • dayé o número de dias que serão inseridos a partir de startDate.

Examinando o procedimento armazenado loadDates()

No loadDates()procedimento armazenado:

Primeiro, declare variáveis ​​a countere currentDatepara manter valores imediatos. Os valores padrão de countere currentDatesão 0e startDaterespectivamente.

Em seguida, verifique se counteré menor que day, se sim:

  • Insira a data atual na calendarstabela.
  • Aumente em counterum e currentDateem um dia usando a DATE_ADD()função.

O WHILEloop executa repetidamente a instrução INSERT para inserir datas na calendarstabela até que counterseja menor ou igual a day.

Chamando o procedimento armazenado

Primeiro, chame o procedimento armazenado loadDates()para inserir 365 linhas na calendarstabela 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 calendarstabela 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 WHILEo loop MySQL para executar uma ou mais instruções repetidamente, desde que uma condição seja verdadeira.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *