Estruturas de Repetição com LOOP no SQL

Entenda o que é uma estrutura de repetição com LOOP no SQL. Qual a finalidade e como ela pode ser utilizada para diversas tarefas.

A estrutura de repetição com LOOP no SQL executa um bloco de comandos várias vezes dentro de uma procedure — no MySQL, com LOOP, WHILE ou REPEAT. Ela serve para gerar dados em série, processar registros em etapas e automatizar tarefas repetitivas direto no banco, com a condição de parada controlando o fim da repetição.

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

O que você aprende neste vídeo

Resposta rápida: A aula ensina a montar uma estrutura de repetição com LOOP no MySQL dentro de uma procedure, do contador simples até a saída concatenada. Você aprende a trocar o delimitador, criar a procedure com parâmetro, declarar variáveis, nomear o laço, incrementar com SET, parar com LEAVE e acumular o texto com CONCAT_WS.

Neste vídeo (19 min):

  • 1:00 - Estrutura de repetição é o bloco de comandos executado até a condição de parada ser satisfeita
  • 2:00 - Procedure como bloco de código nomeado, executado depois por uma instrução própria
  • 3:00 - Troca do delimitador com DELIMITER $$ para o ponto e vírgula não encerrar a procedure
  • 4:00 - Criação do bloco com CREATE PROCEDURE contador e o parâmetro limite INT
  • 5:00 - Variável de contagem declarada com DECLARE i INT DEFAULT 0 dentro do bloco
  • 6:00 - Laço nomeado com loop_exemplo: LOOP e incremento com SET i = i + 1
  • 8:00 - Condição de parada com IF i = limite THEN LEAVE loop_exemplo, que encerra o laço
  • 10:00 - Chamada da procedure com CALL contador(10) e testes com outros limites
  • 11:00 - Limitação do SELECT dentro do laço, que abre uma janela de resultado por número
  • 14:00 - Variável de texto acumulando os números com CONCAT_WS em vez de imprimir um a um
  • 16:00 - SELECT do texto depois do END LOOP, para uma saída única com toda a contagem
  • 17:00 - Erro de tamanho do VARCHAR e recriação da procedure com 10.000 caracteres

Trechos do vídeo:

  • Uma estrutura de repetição executa o mesmo bloco de comandos até a condição de parada ser satisfeita.
  • O DELIMITER precisa mudar antes de criar a procedure, senão o primeiro ponto e vírgula encerra o bloco cedo demais.
  • No CONCAT_WS o separador vai no primeiro argumento e vale para todas as junções seguintes.
  • Além do LOOP, o MySQL tem outras estruturas de repetição: WHILE e REPEAT.

Estrutura de Repetição com LOOP no SQL

Na aula de hoje eu vou te explicar o que é uma estrutura de repetição com LOOP no SQL, qual a finalidade dela e como ela pode te ajudar em seus trabalhos.

Vou te mostrar o passo a passo para construir essa estrutura de repetição com LOOP no SQL. Só que nesse processo, nós vamos utilizar uma procedure no SQL.

Então vem comigo, que eu vou te mostrar como usar estruturas de repetição no SQL para agilizar suas tarefas.

O que é Estrutura de Repetição

Toda linguagem de programação possui uma estrutura de repetição. Essas estruturas são utilizadas para executar repetidamente um bloco de códigos até que uma determinada condição específica seja atendida.

Um exemplo muito clássico é o contador que executa uma determinada ação até atingir um valor final.

Nós vamos criar um exemplo ao longo dessa aula que é uma procedure que executa a contagem até chegar no valor de interesse.

A procedure é um bloco de código ao qual atribuímos um nome e que pode ser chamado para execução sempre que necessário.

Ajustando o Delimitador da Procedure

Para criamos e executarmos a nossa procedure o primeiro passo será alterar o delimitador, para que nosso SQL execute corretamente o bloco de códigos.

Por padrão no SQL utilizamos o ponto e vírgula como delimitador, é ele que identifica onde comando termina.

Como precisaremos trabalhar com um bloco de código dentro da procedure, com diversos comandos sendo executados de uma vez. Precisamos ajustar o delimitador para que o SQL não entenda que a cada ponto e vírgula o comando foi finalizado.

Ícone SQLSQL Impressionador

Domine a linguagem mais importante do Mundo para quem trabalha com Dados, seja para se destacar na sua empresa atual, para conseguir um diferencial em processos seletivos ou até mesmo para entrar em áreas de dados.

Começar agoraSeta para a direita
Fundo SQLTelas SQL
Luz SQL

Podemos definir um novo delimitador através da instrução:

Codigo
delimiter $$

E finalizar o uso desse delimitador com o comando:

Codigo
end $$
delimiter ;

Dessa forma estamos finalizando o uso do $$ como delimitador e definindo o ponto e vírgula novamente como delimitador padrão.

Procedure no SQL

Com o delimitador definido, podemos declarar nossa procedure dentro dele. Vamos chama-la de contador e ela receberá um parâmetro chamado limite que será um valor do tipo int (número inteiro). É o limite que definirá quando o contador deve parar de contar.

Vamos definir o início da procedure através da palavra-chave begin e dentro dela construir a lógica do nosso contador.

Como o objetivo é o programa contar até atingir o valor limite informado. Vamos declarar uma variável i do tipo inteiro, e inicializá-la com o valor padrão (default) de 0. É essa variável que controlará quantas iterações nosso loop já realizou.

Codigo
delimiter $$
create procedure contador(limite int)
begin
    declare i int default 0;

end $$
delimiter ;
Codigo

Em seguida vamos iniciar o loop e nomeá-lo de exemplo, você pode utilizar o nome que preferir. Esse nome será o rótulo do nosso loop que utilizaremos no momento de sair do processo de repetição.

Esse processo consistirá de: a cada iteração, a variável i terá seu valor incrementado em 1. Para declarar esse cálculo utilizaremos o comando set e em seguida usaremos o select para exibir o valor atual da variável i após esse incremento.

Codigo
delimiter $$

create procedure contador(limite int)
begin
    declare i int default 0;
    exemplo: loop
        set i = i+1;
        select i;

end $$
delimiter ;

Agora precisamos definir a lógica que dirá para o nosso SQL o momento de parar esse contador, encerrar o nosso loop.

Para isso, utilizaremos da estrutura condicional if. Com ela podemos verificar se o valor de i já atingiu o valor definido para o parâmetro limite.

De modo que, se i for igual ao limite, sairemos do loop com a instrução leave. Encerraremos o if e em seguida encerraremos o loop.

Codigo
delimiter $$

create procedure contador(limite int)
begin
    declare i int default 0;
    exemplo: loop
        set i = i+1;
        select i;

        if i = limite then
            leave exemplo
        end if;

    end loop exemplo;

end $$
delimiter ;

Com isso nossa procedure estará pronta. Basta executá-la e após isso adicionar uma chamada para ela passando o valor limite até o qual desejamos contar.

Para chamar uma procedure basta utilizar a instrução call seguida do nome da procedure passando como argumento para ela o valor desejado para o parâmetro limite.

Codigo
delimiter $$

create procedure contador(limite int)
begin
    declare i int default 0;
    exemplo: loop
        set i = i+1;
        select i;

        if i = limite then
            leave exemplo
        end if;

    end loop exemplo;

end $$
delimiter ;

call contador(10);

Resultado contador

Cada um desses resultados exibidos equivale a um número, iniciando em 1 e finalizando em 10.

Exibindo os Resultados de Forma Contínua

O nosso contador anterior funcionou corretamente como você pode ver, porém ele abriu uma janela de resultado para cada número contado.

Podemos melhorar essa visualização apresentando os valores de forma contínua em uma única saída.

Para isso vamos substituir o select que exibia o valor da variável i logo após o seu incremento, por uma variável de texto que a cada iteração irá concatenar o valor atual da variável i com o conteúdo da variável texto separando-os por vírgula.

Como utilizaremos uma nova variável de texto, precisaremos declará-la também logo abaixo da variável i. Esta variável terá o comprimento máximo de 100 caracteres, um bom valor para o nosso exemplo.

Ao final, após finalizar o loop, vamos adicionar o comando select texto para exibir o valor final da variável texto que será uma sequência numérica dividida por vírgulas.

Codigo
delimiter $$

create procedure contador_impressionador(limite int)
begin
    declare i int default 0;
    declare texto varchar(100);
    exemplo: loop
        set i = i+1;
        set texto = concat_ws(",", texto, i);

        if i = limite then
            leave exemplo
        end if;

    end loop exemplo;

    select texto;

end $$
delimiter ;

call contador_impressionador(3);

Nosso contador impressionador basicamente fará o mesmo que o anterior, com a diferença que, ao invés de criar um resultado para cada número, ele irá gerar uma sequência de números concatenados separados por vírgula, de acordo com o limite especificado.

Executando nosso código teremos o seguinte resultado:

resultado contador impressionador

Como definimos a nossa variável de texto com 100 caracteres, isso significa que, se tentarmos contar até um valor que exceda esse número, receberemos um erro. Você pode aumentar esse valor para resolver essa questão.

Perguntas frequentes

1. O SQL tem estrutura de repetição?

Nas consultas comuns, não — o SQL trabalha com conjuntos. Loops existem dentro de rotinas armazenadas (procedures e functions): o MySQL oferece LOOP, WHILE e REPEAT para repetir blocos de comandos com condição de parada, semelhante às linguagens de programação.

2. O que é uma procedure no SQL?

É um bloco de comandos salvo no próprio banco, executado sob demanda com o CALL. Procedures aceitam parâmetros, variáveis e estruturas de controle (IF, loops), concentrando regras de negócio e automações no servidor — sem depender de sistema externo.

3. Para que serve o DELIMITER ao criar procedures?

Para o MySQL não encerrar a procedure no primeiro ponto e vírgula interno. Trocando o delimitador (por exemplo, para $$) antes do CREATE PROCEDURE, o corpo inteiro é lido como um bloco único; depois, o delimitador volta ao ponto e vírgula padrão.

4. Quando evitar loops no SQL?

Sempre que uma operação em conjunto resolver: UPDATE com WHERE, INSERT … SELECT e JOINs processam milhares de linhas de uma vez, muito mais rápido que linha a linha. Reserve o loop para lógicas realmente sequenciais, como gerar séries e processar em lotes.

Conclusão – Estrutura de Repetição com LOOP no SQL

Na aula de hoje eu te expliquei o que é uma estrutura de repetição com LOOP no SQL e demonstrei com um exemplo prático como utilizá-la para construir um contador impressionador no SQL.

Hashtag Treinamentos

Para acessar outras publicações de SQL, clique aqui!


Quer aprender mais sobre SQL com um minicurso básico gratuito?