Bom dia, boa tarde, boa noite eu no ex 5-7 eu o resolvi de 2 maneiras porem nos 2 casos nos 3 se contarmos a resposta do professor o resultado é diferente , alguem saberia me dizer o porque disso ? nao consigo entender isso sozinho
Primeira resposta:
CREATE DEFINER=`root`@`localhost` PROCEDURE `mais_um_campo`()
BEGIN
DECLARE vQuantidade INT DEFAULT 0;
DECLARE vPreco FLOAT DEFAULT 0;
DECLARE vSOMA FLOAT DEFAULT 0;
DECLARE c CURSOR FOR SELECT QUANTIDADE, PRECO, ROUND(SUM(QUANTIDADE * PRECO),0) AS FATURAMENTO
FROM itens_notas_fiscais INF INNER JOIN notas_fiscais NF
ON INF.NUMERO = NF.NUMERO
WHERE MONTH(NF.DATA_VENDA) = 1 AND YEAR(NF.DATA_VENDA) = 2017;
OPEN c;
FETCH c INTO vQUANTIDADE, vPreco, vSOMA;
SELECT vQUANTIDADE AS QUANTIDADE, vPreco as PRECO, vSOMA as FATURAMENTO;
END
Segunda Resposta:
CREATE DEFINER=`root`@`localhost` PROCEDURE `mais_um_campo_looping`()
BEGIN
DECLARE vQUANTIDADE INT DEFAULT 0;
DECLARE vPRECO FLOAT DEFAULT 0;
DECLARE vFATURAMENTO FLOAT DEFAULT 0;
DECLARE vCheck INT DEFAULT 0;
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) = 1 AND YEAR(NF.DATA_VENDA) = 2017;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vCheck = 1;
OPEN c;
WHILE vCheck = 0
DO
IF vCheck = 0 THEN
FETCH c INTO vQUANTIDADE, vPRECO;
set vFATURAMENTO = vFATURAMENTO + (vQUANTIDADE * vPRECO);
END IF;
END WHILE;
SELECT vQUANTIDADE, vPRECO, vFATURAMENTO;
END
e Resposta do Professor
CREATE DEFINER=`root`@`localhost` PROCEDURE `R_Limite_creditos`()
BEGIN
DECLARE LIMITECREDITO FLOAT;
DECLARE LIMITECREDITOACUM FLOAT;
DECLARE fim_do_cursor INT;
DECLARE c CURSOR FOR SELECT LIMITE_DE_CREDITO FROM Tabela_de_Clientes;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fim_do_cursor = 1;
SET fim_do_cursor = 0;
SET LIMITECREDITOACUM = 0;
SET LIMITECREDITO = 0;
OPEN c;
WHILE fim_do_cursor = 0
DO
FETCH c INTO LIMITECREDITO;
IF fim_do_cursor = 0 THEN
SET LIMITECREDITOACUM = LIMITECREDITOACUM + LIMITECREDITO;
END IF;
END WHILE;
SELECT LIMITECREDITOACUM;
CLOSE c;
END