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 contadore o parâmetrolimite INT - 5:00 - Variável de contagem declarada com
DECLARE i INT DEFAULT 0dentro do bloco - 6:00 - Laço nomeado com
loop_exemplo: LOOPe incremento comSET 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
SELECTdentro do laço, que abre uma janela de resultado por número - 14:00 - Variável de texto acumulando os números com
CONCAT_WSem vez de imprimir um a um - 16:00 -
SELECTdo texto depois doEND LOOP, para uma saída única com toda a contagem - 17:00 - Erro de tamanho do
VARCHARe 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
DELIMITERprecisa mudar antes de criar a procedure, senão o primeiro ponto e vírgula encerra o bloco cedo demais. - No
CONCAT_WSo 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:WHILEeREPEAT.
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.
Podemos definir um novo delimitador através da instrução:
delimiter $$E finalizar o uso desse delimitador com o comando:
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.
delimiter $$
create procedure contador(limite int)
begin
declare i int default 0;
end $$
delimiter ;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.
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.
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.
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);
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.
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:

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!


