Pr0f3t4 0 Denunciar post Postado Julho 13, 2009 Prezados, Em uma certa view, consigo recuperar os sequintes resultados (hipotéticos): select Notafiscal, (TotalCursos+TotalServicos+2via) AS TotalDaNota from view_total_individual_de_notas where comercialID = 156; +------------+-------------+ | Notafiscal | TotalDaNota | +------------+-------------+ | 008727 | 1607.00 | | 008728 | 121.00 | | 008730 | 14652.00 | +------------+-------------+ 3 rows in set (0.00 sec) Preciso de uma instrução que conte linha a linha, e que me permita somar o resultado da coluna TotalDaNota (linha a linha) e verificar se em determinada momento atingi a soma superior a 5,000.00 (cinco mil), nessa linha inserir o percentual de 4,65%, e quaisquer fatura emitida após essa condição, calcular o valor dessa fatura com 4,65%, tudo isso dentro do mês corrente. Andei dando uma olhada na instrução CURSOR, porém não entendi como usar essa instrução adequadamente no intuito de tentar concluir essa tarefa. Preciso muito da ajuda da comunidade pra resolver esse problema. Que a Força Esteja Com Vocês ! Compartilhar este post Link para o post Compartilhar em outros sites
Pr0f3t4 0 Denunciar post Postado Julho 13, 2009 // comcei com isso, mas ná hora de roda gera erros. To usando o MySQL Front 5 no MySQL 5.1 CREATE PROCEDURE TesteRetencao() BEGIN DECLARE contador INT DEFAULT 0; DECLARE cur_calculo_retencao FOR SELECT (TotalCursos + TotalServicos + 2via) FROM view_total_individual_de_notas AS notas WHERE comercialID = 156; OPEN cur_calculo_retencao REPEAT FETCH cur_calculo_retencao INTO Total end; Compartilhar este post Link para o post Compartilhar em outros sites
Pr0f3t4 0 Denunciar post Postado Julho 14, 2009 Pessoal, depois de muito estudo, cheguei a esta SP usando cursor CREATE PROCEDURE sp_fatur_retencao() BEGIN #DECLARE fim INT DEFAULT 0; DECLARE ID INT DEFAULT 0; DECLARE Nota double(7,2 ); DECLARE SomaDasNotas double(7,2); DECLARE Total double(7,2); DECLARE myCursor CURSOR FOR SELECT comercialID, (TotalCursos + TotalServicos + 2via) AS Total FROM view_total_individual_de_notas WHERE comercialID=156; SET @linhas = FOUND_ROWS(); SET @contador = 0; OPEN myCursor; REPEAT FETCH myCursor INTO ID, Nota; SET SomaDasNotas = (SomaDasNotas + Nota); SET Total = SomaDasNotas; SET @contador = (@contador + 1); UNTIL @contador = @linhas END REPEAT; CLOSE myCursor; INSERT INTO fatur_retencao VALUES(ID, Total); END; Porém, não está gravando nenhuma informação na tabela. Posso adiantar que a instrução select tém o retorno de 3 linhas. Será que podem me dar uma ajuda.? Que a Força Esteja Com Vocês ! Compartilhar este post Link para o post Compartilhar em outros sites
Pr0f3t4 0 Denunciar post Postado Julho 14, 2009 Prezados, consegui resovler o problema informado. Depois de muito pensar, analisar a situação, a versão final da minha SP para calcular a soma do valor de cada fatura e verificar se ela atingui o valor superior a 5000 ficou assim: SP_CALCULAR_RETENCAO: # # arquivo sp+faturamento_retencao # calcula as faturas com retencao # # drop procedure if exists sp_fatur_retencao; create procedure sp_fatur_retencao(IN nID int) begin declare id int default 0; declare num_nota int default 0; declare valor_da_nota double default 0; declare total_da_nota double default 0; declare soma_das_notas double default 0; declare valor_final_da_nota double default 0; declare retencao double default 0; declare linhas int default 0; declare flag int default 0; declare newCursor cursor for select comercialID, NotaFiscal, (TotalCursos + TotalServicos + 2via) as TotalDaNota from view_total_individual_de_notas where comercialID=nID; declare continue handler for not found set linhas = 1; open newCursor; inicio: loop fetch newCursor into id, num_nota, valor_da_nota; if linhas = 1 then leave inicio; end if; set soma_das_notas = (soma_das_notas + valor_da_nota); if flag = 0 then begin if (soma_das_notas > 5000) then set retencao = (soma_das_notas * .0465); insert into fatur_retencao set comercialID=id, NotaFiscal=num_nota, Retencao=retencao; set flag = 1; end if; end; else if flag = 1 then set retencao = (valor_da_nota * .0465); insert into fatur_retencao set comercialID=id, NotaFiscal=num_nota, Retencao=retencao; end if; end if; end loop inicio; end; # wq #;;;;;;;;;;;;;;;;;;;;;;;;;;;Dessa forma, quando a soma atingir o valor superior a 5000, insiro o imposto de 4,65%, se existirem mais notas, o valor será atribuido de forma automatica. Que a Força Esteja Com Vocês ! Compartilhar este post Link para o post Compartilhar em outros sites