Olá, bom dia. Tenho uma dúvida sobre a resolução.
Acrescentando o IF, da resposta do professor, código abaixo, a resposta fica : 3838320.
IF fim_do_cursor = 0 THEN
SET FATURAMENTOACUM = FATURAMENTOACUM + (QUANTIDADE * PRECO);
END IF;
Porém sem o IF do código acima, a resposta fica: 3838950.
Acredito que com o IF do professor, fica faltando uma iteração no laço WHILE, para o resultado ficar menor com o IF.
DELIMITER $$
DROP PROCEDURE IF EXISTS Mais_Um_Campo$$
CREATE PROCEDURE Mais_Um_Campo(mes INT, ano INT)
BEGIN
DECLARE vQuantidade INT;
DECLARE vPreco FLOAT;
DECLARE vFaturamentoTotal FLOAT DEFAULT 0;
DECLARE fim_do_cursor BOOLEAN DEFAULT FALSE;
DECLARE c CURSOR FOR
SELECT INF.QUANTIDADE, INF.PRECO FROM itens_notas_fiscais INF
INNER JOIN notas_fiscais NF ON NF.NUMERO = INF.NUMERO
WHERE MONTH(NF.DATA_VENDA) = mes AND YEAR(NF.DATA_VENDA) = ano;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fim_do_cursor = TRUE;
OPEN c;
WHILE fim_do_cursor IS FALSE
DO
FETCH c INTO vQuantidade, vPreco;
SET vFaturamentoTotal = (vFaturamentoTotal + (vQuantidade * vPreco));
END WHILE;
CLOSE c;
SELECT vFaturamentoTotal AS 'Faturamento Total';
END$$
DELIMITER ;