Nao consegui entender o porque da repeticao do nome da beatriz e consequentemente o pq a solucao foi necessária
ATÉ 50% OFF
TÁ ACABANDO!
0 dias
0 horas
0 min
0 seg
Nao consegui entender o porque da repeticao do nome da beatriz e consequentemente o pq a solucao foi necessária
Oi Davi, tudo bem?
No primeiro código, a repetição do nome "Beatriz" acontece por causa do local onde o primeiro FETCH é realizado dentro do loop WHILE. Vou explicar o comportamento em etapas para facilitar o entendimento:
OPEN cursor1;
WHILE fimCursor = 0 DO
SELECT vnome; -- (1) Exibe o valor de `vnome` antes do próximo valor ser buscado
FETCH cursor1 INTO vnome; -- (2) Busca o próximo nome do cursor e coloca em `vnome`
END WHILE;
CLOSE cursor1;
vnome é exibido (SELECT vnome) antes de buscar o próximo valor do cursor, ou seja, antes de ser atualizado.vnome com FETCH.fimCursor só é alterado após o FETCH falhar, o loop ainda imprime novamente o valor de vnome, que contém "Beatriz".Já no segundo código, o comportamento é diferente:
OPEN cursor1;
FETCH cursor1 INTO vnome; -- (1) Busca o primeiro nome antes de começar o loop
WHILE fimCursor = 0 DO
SELECT vnome; -- (2) Aqui, vnome é exibido, que já contém o valor atual
FETCH cursor1 INTO vnome; -- (3) Busca o próximo nome para a próxima iteração
END WHILE;
CLOSE cursor1;
FETCH cursor1 INTO vnome;. Assim, vnome já contém o primeiro nome da tabela.vnome, que foi carregado anteriormente.FETCH para obter o próximo nome.fimCursor é definido como 1, e o loop termina sem repetir o último nome.Portanto, a diferença está no momento em que o vnome é atualizado. No primeiro código, o valor é exibido antes do FETCH, o que causa a repetição do último nome. Já no segundo código, o valor é buscado antes do loop, e dentro do loop o valor exibido é sempre o correto. Assim, não há repetição.
Espero ter ajudado.
Qualquer dúvida, não hesite em compartilhar no fórum.
Abraços!