Oi, Wladimir, tudo bem?
Peço desculpas por demorar a responder.
Para que a sua Stored Procedure funcione, precisamos trabalhar com uma estrutura de repetição chamada WHILE
. Seu funcionamento acontece da seguinte forma: enquanto uma condição for verdadeira, uma ação continuará sendo executada — logo, a partir do momento que esta condição se tornar falsa, o processo é interrompido e tal ação para de ocorrer.
Em sua Stored Procedure, foi utilizada a estrutura IF
para inserir novas informações à TABELA_ALEATORIOS
. Como ela realiza a verificação somente uma vez, apenas um registro será adicionado à tabela — após isso acontecer, entende-se que o processo foi finalizado.
Para que novos dados sejam adicionados enquanto a variável vLoop
for diferente de 100, precisamos substituir os comandos referentes ao IF
pelos códigos correspondentes ao WHILE
, desta maneira:
CREATE DEFINER=`root`@`localhost` PROCEDURE `Tabela_numeros`(Min int, Max int)
BEGIN
declare vLoop int;
set vLoop = 0;
DELETE FROM TABELA_ALEATORIOS;
WHILE vLoop <> 100 DO
insert into TABELA_ALEATORIOS(numero) values(f_numero_aleatorio(Min, Max));
set vLoop = vLoop + 1;
end WHILE;
select * from TABELA_ALEATORIOS;
END
Note que, onde havia a palavra IF
trocamos por WHILE
(tanto no início quanto no fim do fluxo) e também alteramos THEN
por DO
(a palavra DO
faz parte do looping). Com isso, enquanto a nossa condição for verdadeira, novos números aleatórios serão inseridos em TABELA_ALEATORIOS
.
Por fim, podemos visualizar a tabela de números aleatórios digitando o seguinte código:
CALL Tabela_Numeros(1, 1000);
Wladimir, a sua lógica está sim correta, mas quando usamos apenas o IF
, limitamos a quantidade de vezes que uma condição pode ser analisada. Para que a sua Stored Procedure não contenha tal limitação, precisamos utilizar o WHILE
.
Espero ter ajudado! Caso surja alguma dúvida após minha explicação ou durante os seus estudos, fico à disposição.
Abraços!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.