4
respostas

Sobre SP mais_um_campo

Bom dia. Fiz o SP um pouco diferente do professor, mas funcionou também.


CREATE DEFINER=`root`@`localhost` PROCEDURE `mais_um_campo`(mes int(2), ano int(4))
BEGIN
DECLARE TEXTO BIT(1) DEFAULT 0;
DECLARE VMES INT(2) DEFAULT 00;
DECLARE VANO INT(4) DEFAULT 0000;
DECLARE FAT INT DEFAULT 0;
DECLARE FAT_1 INT DEFAULT 0;
DECLARE FAT_2 INT DEFAULT 0;
DECLARE CONT INT DEFAULT 1;
DECLARE CONTROLE INT DEFAULT 0;
DECLARE VETOR CURSOR FOR 
SELECT A.QUANTIDADE, A.PRECO, MONTH(DATA_VENDA), YEAR(DATA_VENDA)
FROM itens_notas_fiscais A INNER JOIN notas_fiscais B 
ON A.NUMERO = B.NUMERO 
WHERE mes = MONTH(DATA_VENDA) AND ano = YEAR(DATA_VENDA)
LIMIT 10;-- VAI FUNCIONAR?
DECLARE CONTINUE HANDLER FOR 1329 SET TEXTO = 1;

/* XXXXX*/
SELECT COUNT(*) INTO CONTROLE FROM notas_fiscais
WHERE mes = MONTH(DATA_VENDA) AND ano = YEAR(DATA_VENDA);
OPEN VETOR; 
WHILE CONT <= CONTROLE
    DO
    IF TEXTO = 0 THEN
        FETCH VETOR INTO FAT, FAT_2, VMES, VANO;
        SET FAT_1 = FAT_1 + (FAT * FAT_2);
        SET CONT = CONT + 1;
        SELECT (FAT * FAT_2) AS TOTAL_NOTA, FAT_1 AS FATURAMENTO_TOTAL;
        END IF;
    END WHILE;

CLOSE VETOR;
END
4 respostas

Olá Danival, tudo bem?

Não consegue compreender muito bem como a sua SP funciona e o resultado.

Então Danival, você pode explicar como a sua SP funciona? Assim poderei compreender melhor a sua lógica.

Aguardo o seu retorno!

Ela pede no início um mês e um ano. Essa variável vai no Where para limitar a busca. A variavel controle recebe a quantidade de linhas q se tem na busca, a fim de controlar o looping comparando c a variável cont, q incrementa 1 todo ciclo. As variáveis fat e fat2 recebem quantidade e preço, e seus valores sao acumulados na variável fat1. e eu acho q as variáveis vmes e vano ficaram meio fora do contexto.

Certo Danival, achei bem legal como você fez a sua SP, porém não achei tão interessante exibir o valor por partes, já que o resultado é o valor total para um mês e ano específico.

Mas foi bem legal você ter compartilhado a sua resposta da atividade aqui com a gente, continue assim você está indo muito bem Danival :)

Bons estudos!

Entendi. Eu deixo por partes assim, pq quando faço coloco um limit pequeno, e testo os valores manualmente, para ver se a execução esta correta, depois tiro o limit e deixo rodar normalmente

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software