MySQL – Estruturas de Repetição – comando REPEAT

MySQL – Estruturas de Repetição – comando REPEAT

Dando continuidade às lições sobre blocos iterativos no MySQL, estudaremos neste artigo o comando REPEAT. Lembrando que há três tipos de blocos iterativos disponíveis:

  • LOOP
  • REPEAT
  • WHILE

Comando REPEAT

Sintaxe:

[<rótulo>:] REPEAT
declarações
UNTIL condição
END REPEAT [<rótulo>];

Exemplo do comando REPEAT no MySQL

CREATE PROCEDURE acumula_repita (limite TINYINT UNSIGNED)
BEGIN
DECLARE contador TINYINT UNSIGNED DEFAULT 0;
DECLARE soma INT DEFAULT 0;
REPEAT
SET contador = contador + 1;
SET soma = soma + contador;
UNTIL contador >= limite
END REPEAT;
SELECT soma;
END//
DELIMITER ;

-- testando a estrutura REPITA:
CALL acumula_repita(10);
CALL acumula_repita(0); -- Este resulta em valor errado, pois
-- o contador é incrementado ANTES do teste condicional.

Exemplo do comando REPEAT com a cláusula LEAVE:

-- Resolvendo o problema do teste de REPITA
DROP PROCEDURE IF EXISTS acumula_repita;
DELIMITER //
CREATE PROCEDURE acumula_repita (limite TINYINT UNSIGNED)
main: BEGIN
DECLARE contador TINYINT UNSIGNED DEFAULT 0;
DECLARE soma INT DEFAULT 0;
IF limite < 1 THEN
    SELECT 'O valor deve ser maior que zero.' AS Erro;
    LEAVE main;
END IF;
REPEAT
    SET contador = contador + 1;
    SET soma = soma + contador;
UNTIL contador >= limite
END REPEAT;
SELECT soma;
END//
DELIMITER ;

-- testando a estrutura REPITA:
CALL acumula_repita(10);
CALL acumula_repita(0); -- Agora o erro é reportado.

Assista ao vídeo abaixo para ver as explicações sobre o comando REPITA e ver os códigos listados em ação:

Sobre Fábio dos Reis (1195 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*