Ir para conteúdo

POWERED BY:

Edilson Chaves

Members
  • Total de itens

    3
  • Registro em

  • Última visita

Tudo que Edilson Chaves postou

  1. Edilson Chaves

    Criar um novo registro com CURSOR no MySql

    Se alguém tiver um problema como este, eu encontrei o problema e solução. Por algum motivo o MySql perde o valor da Variável quando e passada por outro mais de uma condição IF ... END. O que fiz foi criar uma variável global para todos os valores que seriam utilizados posteriormente. DELIMITER $$ CREATE PROCEDURE sp_Monitorado() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE vPrevisto, vRealizado numeric(10,2); DECLARE vAnoAtu, vMesAtu, vOrdem, vAno, vMes INT; DECLARE vGrupo, vSubGrupo, vPessoa VARCHAR(100); DECLARE cDados CURSOR FOR SELECT Ordem, Grupo, SubGrupo, Pessoa, Ano, Mes, Previsto, Realizado FROM vwResultado; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; SET @PessoaAnt = (SELECT pessoa from vwResultado limit 1); SET @VlrMesAntPrv := 0.0; SET @VlrMesAntRea := 0.0; OPEN cDados; read_loop: LOOP FETCH cDados INTO vOrdem, vGrupo, vSubGrupo, vPessoa, vAno, vMes, vPrevisto, vRealizado; IF done THEN LEAVE read_loop; END IF; IF @PessoaAnt != vPessoa THEN SET @VlrMesAntPrv := 0.0; SET @VlrMesAntRea := 0.0; END IF; SET @VlrMesAntPrv = @VlrMesAntPrv + vPrevisto; SET @VlrMesAntRea = @VlrMesAntRea + vRealizado; SET @PessoaAnt = vPessoa; INSERT INTO Resultado VALUES (vOrdem, vGrupo, vSubGrupo, vPessoa, vAno, vMes, vPrevisto, vRealizado); IF (@PessoaAnt = vPessoa AND vOrdem = 4) THEN INSERT INTO Resultado VALUES (99, vGrupo, 'PONTO DE EQUILIBRIO', vPessoa, vAno, vMes, @VlrMesAntPrv, @VlrMesAntRea); END IF; END LOOP read_loop; CLOSE cDados; END; $$ DELIMITER;
  2. Edilson Chaves

    Criar um novo registro com CURSOR no MySql

    Ola amigos, uso curso a algum tempo, só que desta vez estou apanhando de algo que aparentemente e bem simples. Tenho certeza que estou esquecendo algum detalhe. To a 2 dias me debatendo com isto. Por isto estou pedindo ajuda. O que pretendo fazer e criar um novo registro que mostre a evoluçao do crecimento mensal projetando o ponto de equilibrio. Para isto eu preciso pegar a soma do mês anterior e acrescentar a soma do atual. Esta é a Procedure. Abaixo explico o quer nao esta funcionado. DROP PROCEDURE IF EXISTS sp_Monitorado; DELIMITER $$ CREATE PROCEDURE sp_Monitorado() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE vVlrMesAtuPrv, vVlrMesAntPrv, vVlrMesAtuRea, vVlrMesAntRea, vPrevisto, vRealizado numeric(10,2); DECLARE vAnoAtu, vMesAtu, vOrdem, vAno, vMes INT; DECLARE vGrupo, vSubGrupo, vPessoa, vPessoaAtu VARCHAR(100); DECLARE cDados CURSOR FOR SELECT Ordem, Grupo, SubGrupo, Pessoa, Ano, Mes, Previsto, Realizado FROM vwresultadomonitoramento; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cDados; read_loop: LOOP FETCH cDados INTO vOrdem, vGrupo, vSubGrupo, vPessoa, vAno, vMes, vPrevisto, vRealizado; IF done THEN LEAVE read_loop; END IF; IF vOrdem <= 4 THEN SET vVlrMesAtuPrv = vVlrMesAtuPrv + vPrevisto; SET vVlrMesAtuRea = vVlrMesAtuRea + vRealizado; INSERT INTO zzResultado VALUES (vOrdem, vGrupo, vSubGrupo, vPessoa, vAno, vMes, vPrevisto, vVlrMesAtuPrv); END IF; IF vOrdem = 4 THEN SET vVlrMesAntPrv = vVlrMesAntPrv + vVlrMesAtuPrv; SET vVlrMesAntRea = vVlrMesAntRea + vVlrMesAtuRea; INSERT INTO zzResultado VALUES (99, vGrupo, 'PONTO DE EQUILIBRIO', vPessoa, vAno, vMes, vVlrMesAntPrv, vVlrMesAntRea); SET vVlrMesAtuPrv = 0; SET vVlrMesAtuPrv = 0; END IF; END LOOP read_loop; CLOSE cDados; END; $$ DELIMITER; Quando co cursor entra nesta condiçao abaixo ele deveria pegar o valor acumulado anterior e acrescentar as variaveis (vVlrMesAntPrv, vVlrMesAntRea). So que o valor se perde e fica tudo zerado. Alguém pode me dizer onde estou errando. Anexo tem um print do resultado que pretendo ter IF vOrdem = 4 THEN SET vVlrMesAntPrv = vVlrMesAntPrv + vVlrMesAtuPrv; SET vVlrMesAntRea = vVlrMesAntRea + vVlrMesAtuRea; INSERT INTO zzResultado VALUES (99, vGrupo, 'PONTO DE EQUILIBRIO', vPessoa, vAno, vMes, vVlrMesAntPrv, vVlrMesAntRea); SET vVlrMesAtuPrv = 0; SET vVlrMesAtuPrv = 0; END IF;
  3. Edilson Chaves

    Criar um novo registro com CURSOR no MySql

    Motta obrigado por responder. 1) sua preocupação com expor o nome de uma cliente e valida, mas este e um nome ficticio que invetei para este exemplo. 2) nao se preocupe com estes valores que estão na frente do nome. Eles nao estão validos ainda. Será o acumulado do mes 3) Ja usei a clausula OVER no Oracle e Sql Server, nem sabia que o MySql ja tinha. No meu caso acho que ela nao se aplica. Meu caso e simples. fiz um cursor que percorre uma lista ordenada por cliente, ano, mes e um ID com nome ordem. a cada registro que ele passa, e acumulado o valor PLANEJADO em "vVlrMesAtuPrv". Quando ele entra condição "vOrdem = 4" deveria fazer este calculo "SET vVlrMesAntPrv = vVlrMesAntPrv + vVlrMesAtuPrv;", só que qdo entra aqui o calculo nao execulta e o valor fica ZERO.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.