USE `sucos_vendas`;
DROP procedure IF EXISTS `sucos_vendas`.`Mais_Um_Campo1`;
;
DELIMITER $$
USE `sucos_vendas`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `Mais_Um_Campo1`(VMES INT,VANO INT)
BEGIN
DECLARE FIM_CURSOR BIT(1) DEFAULT 1;
DECLARE VQTD,VPRECO FLOAT;
DECLARE VTOTALVENDA,VFATURAMENTO FLOAT DEFAULT 0;
DECLARE C CURSOR FOR SELECT QUANTIDADE,PRECO FROM ITENS_NOTAS_FISCAIS INF
INNER JOIN NOTAS_FISCAIS NF ON INF.NUMERO=NF.NUMERO
WHERE MONTH(NF.DATA_VENDA)=VMES AND YEAR(NF.DATA_VENDA)=VANO;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET FIM_CURSOR=0;
OPEN C;
WHILE FIM_CURSOR DO
FETCH C INTO VQTD,VPRECO;
IF FIM_CURSOR THEN
SET VTOTALVENDA=(VQTD*VPRECO);
SET VFATURAMENTO=VFATURAMENTO+VTOTALVENDA;
END IF;
END WHILE;
SELECT CONCAT(convert(VMES,CHAR),'/',CONVERT(VANO,CHAR)) AS MES_ANO,
CONCAT('R$ ', REPLACE(REPLACE(REPLACE(FORMAT(VFATURAMENTO, 2),'.',';'),',','.'),';',',')) AS FATURAMENTO;
CLOSE C;
END$$
DELIMITER ;
;
Usei o FIM_CURSOR como tipo BIT(1) inicializado em 1, como 1(um) é igual a True, enquanto essa variável apresentar esse valor o comando WHILE se repete e quando é alterada para 0 (zero) se torna False a partir do erro NOT FOUND. Por isso não apresentei no WHILE uma condição de igualdade já que o BIT já apresenta valor booleano (verdadeiro ou falso).
Esse CONCAT abaixo formata números em moeda (R$).
CONCAT('R$ ', REPLACE(REPLACE(REPLACE(FORMAT(valor, 2),'.',';'),',','.'),';',','))
Espero que ajude.