LOOP MySQL

Resumo : neste tutorial, você aprenderá como usar LOOPa instrução MySQL para executar um bloco de código repetidamente com base em uma condição.

Introdução à instrução MySQL LOOP

A LOOPinstrução permite executar uma ou mais instruções repetidamente.

Aqui está a sintaxe básica da LOOPinstrução:

[begin_label:] LOOP
    statements;
END LOOP [end_label]Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O LOOPpode 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 LEAVEinstruçõ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 LEAVEinstrução é alcançada.

Além disso, você pode usar a ITERATEinstruçã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 LEAVEinstrução funciona de forma semelhante à breakinstrução, enquanto a ITERATEinstrução funciona de forma equivalente à continueinstruçã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 calendarstabela 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 fillDatesque insira linhas na calendarstabela:

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 startDatee endDate, representando o início e o fim do intervalo de datas.

O procedimento armazenado usa um loop, incrementando o valor currentDateem 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, 2024até December 31st, 2024na calendarstabela chamando o fillDatesprocedimento armazenado:

CALL fillDates('2024-01-01','2024-12-31');Linguagem de código:  JavaScript  ( javascript )

Por fim, recupere o número de linhas da calendarstabela 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 calendarstabela:

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, quartere yearcom base nos valores da datecoluna.

Resumo

  • Use a LOOPinstrução MySQL para executar um bloco de código repetidamente.

Deixe um comentário

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