1
resposta

Por que a forma abaixo só me retorna "Pouca nota"?

CREATE DEFINER=`root`@`localhost` PROCEDURE `Testa_Numero_Notas`(vDataNota date)
BEGIN
declare vContaNotas int;
declare vDataNota date;
declare vResultado varchar(20);
select count(*) into vContaNotas from notas_fiscais where data_venda = vDataNota;
If vContaNotas > 70 then
set vResultado = 'Muita Nota';
Else
set vResultado = 'Pouca Nota';
end if;
select vResultado;
END
1 resposta

Olá Pedro, tudo bem? O que acontece é que você declarou a variável vDataNota dentro da Procedure e isso vez com que o valor fosse sobre escrito, então você não vai estar usando a data passada na chamada da Procedure:

`Testa_Numero_Notas`(vDataNota date)

Na verdade vai está usando um valor null. Se quiser testar e entender o que está acontecendo por baixo dos panos basta você adicionar a linha select vDataNota; abaixo da declaração das variáveis:

<Código anterior omitido>

declare vContaNotas int;
declare vDataNota date;
declare vResultado varchar(20);

select vDataNota;

select count(*) into vContaNotas from notas_fiscais where data_venda = vDataNota;

<Código posterior omitido>

Então, como você já recebe a variável vDataNota passado como parâmetro da Stored Procedure, você pode remover a declaração da variável dentro da Stored Procedure da seguinte forma:

CREATE PROCEDURE `FORUM_Testa_Numero_Notas` (vDataNota date)
BEGIN
    declare vContaNotas int;
    declare vResultado varchar(20);    
    select count(*) into vContaNotas from notas_fiscais where data_venda = vDataNota;
    If vContaNotas > 70 then
        set vResultado = 'Muita Nota';
    Else
        set vResultado = 'Pouca Nota';
    end if;
    select vResultado;
END

E vai funcionar corretamente.

Espero ter esclarecido sua dúvida!