1
resposta

Fiz diferente do gabarito e não funcionou , favor verificar pois aparentemente a lógica esta correta

MINHA

CREATE DEFINER=`root`@`localhost` PROCEDURE `Tabela_numeros`(Min int, Max int)
BEGIN
    declare vLoop int;
    set vLoop = 0;
    DELETE FROM TABELA_ALEATORIOS;
    if vLoop <> 100 then
        insert into TABELA_ALEATORIOS(numero) values(f_numero_aleatorio (Min, Max));
        set vLoop = vLoop + 1;
    end if;
    select * from TABELA_ALEATORIOS;
    END

GABARITO

CREATE DEFINER=`root`@`localhost` PROCEDURE `Tabela_numeros`()
BEGIN
DECLARE CONTADOR INT;
DECLARE CONTMAXIMO INT;
SET CONTADOR = 1;
SET CONTMAXIMO = 100;
DELETE FROM TABELA_ALEATORIOS;
WHILE CONTADOR <= CONTMAXIMO
DO
INSERT INTO TABELA_ALEATORIOS (NUMERO) VALUES (f_numero_aleatorio(0,1000));
SET CONTADOR = CONTADOR + 1;
END WHILE;
SELECT * FROM TABELA_ALEATORIOS;
END
1 resposta

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 ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software