MySQL – Estruturas de Repetição – comando LOOP
MySQL – Estruturas de Repetição – comando LOOP
Blocos iterativos
Um bloco iterativo é um bloco de código que é executado repetidamente por um comando especial até que uma condição de parada o interrompa.
Um bloco iterativo pode ser aninhado com outros blocos iterativos.
O MySQL possui três tipos básicos de blocos iterativos:
- LOOP
- REPEAT
- WHILE
Nesta lição estudaremos especificamente o comando LOOP
Comando LOOP
Sintaxe:
[<rótulo>:] LOOP
declarações
END LOOP [<rótulo>];
Exemplo do comando LOOP
DELIMITER // CREATE PROCEDURE acumula (limite INT) BEGIN DECLARE contador INT DEFAULT 0; DECLARE soma INT DEFAULT 0; loop_teste: LOOP SET contador = contador + 1; SET soma = soma + contador; IF contador >= limite THEN LEAVE loop_teste; END IF; END LOOP loop_teste; SELECT soma; END// DELIMITER ; -- Testando CALL acumula(10);
O vídeo a seguir detalha o comando loop e explica o exemplo do código anterior:
Não funcionou.
Deveria ser algo mais do tipo execute e funcione.
Deu um monte de erro.
Opa.
Digite exatamente como está lá descrito cuidando digitar end// e não end //
Eu testei a diferença no meu e funcionou corretamente com end// junto.
Usar enter ao longo do texto me ajudou a achar com mais facilidade o problema pois usei várias linhas e fui na linha certa do problema.
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘loop_teste;
select soma;
end’ at line 11
Pude ver que o erro estava na linha 11, próximo do comando end.
Precisa ser exatamente como digitado, pois end// e end // dão resultados diferentes. O correto que funcionou aqui foi o end//
Use várias linhas para que o erro seja notificado mostrando a linha do erro. Isso me ajudou.
Por alguma razão meu end// finaliza a rotina antes de eu digitar o final delimiter; então digito as duas últimas numa só antes de dar enter, ficando: end// delimiter;