Olá, depois de apanhar muito dentro do scriptcase e também em php com estouro de memória, decidi que o melhor lugar para calcular todas aquelas regras de MMN Binário, é dentro do próprio banco de dados. Assim, a aplicação fica mais leve, e limpa.
Então , como marinheiro de primeira viagem em PL Sql, estou tendo algumas dificuldades, como trabalhar com cursores, extruturas de repetição, e chamar uma procedure dentro da outra...
neste primeiro exemplo, quero apenas somar os pontos de todos os downlines a partir de uma determinada franquia, porém, está com um erro que não consigo achar.
Alguém pode me ajudar?
Segue a procedure:
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$
CREATE PROCEDURE `lkp_diretos_de` (IN upline int,IN market int, IN ciclo int, IN secao varchar(45),OUT total_pontos float)
BEGIN
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET done_arr_rede1 = 1;
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET done_arr_rede2 = 1;
OPEN arr_rede1;
REPEAT
FETCH arr_rede1 INTO fra_id, fra_dat_cadasto, fra_derramado_em_id, fra_upline_id, fra_lado_equipe_upline, fra_saldo_pontos;
IF NOT done_arr_rede1 THEN
if locate(fra_upline,upline)>0 then
OPEN arr_rede2;
while done_arr_rede2 = 1 do
FETCH arr_rede2 INTO fra_id2, fra_dat_cadasto2, fra_derramado_em_id2, fra_upline_id2, fra_lado_equipe_upline2, fra_saldo_pontos2;
if fra_upline_id2 = fra_upline_id1 then
set done_arr_rede2 = 1;
set upline = concat (upline,',',fra_upline_id2);
set total_pontos = total_pontos + fra_saldo_pontos2;
end if;
end while;
CLOSE arr_rede2;
end if;
END IF;
UNTIL done END REPEAT;
Pergunta
Salles PATAMO
Olá, depois de apanhar muito dentro do scriptcase e também em php com estouro de memória, decidi que o melhor lugar para calcular todas aquelas regras de MMN Binário, é dentro do próprio banco de dados. Assim, a aplicação fica mais leve, e limpa.
Então , como marinheiro de primeira viagem em PL Sql, estou tendo algumas dificuldades, como trabalhar com cursores, extruturas de repetição, e chamar uma procedure dentro da outra...
neste primeiro exemplo, quero apenas somar os pontos de todos os downlines a partir de uma determinada franquia, porém, está com um erro que não consigo achar.
Alguém pode me ajudar?
Segue a procedure:
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$
CREATE PROCEDURE `lkp_diretos_de` (IN upline int,IN market int, IN ciclo int, IN secao varchar(45),OUT total_pontos float)
BEGIN
DECLARE done_arr_rede1,done_arr_rede2,diretos1,diretos2,fra_id,fra_derramado_em_id,fra_upline_id ,fra_id2,fra_derramado_em_id2,fra_upline_id2 INTEGER DEFAULT 0;
DECLARE fra_dat_cadasto,fra_dat_cadasto2 DATETIME;
DECLARE fra_lado_equipe_upline,fra_lado_equipe_upline2 char(1);
DECLARE fra_saldo_pontos,fra_saldo_pontos2 float DEFAULT 0;
DEClARE arr_rede1 CURSOR FOR
SELECT
mmn_franquias.fra_id,
mmn_franquias.fra_dat_cadasto,
mmn_franquias.fra_derramado_em_id,
mmn_franquias.fra_upline_id,
mmn_franquias.fra_lado_equipe_upline,
mmn_franquias.fra_saldo_pontos
FROM
mmn_franquias
ORDER BY
mmn_franquias.fra_dat_cadasto;
DEClARE arr_rede2 CURSOR FOR
SELECT
mmn_franquias.fra_id,
mmn_franquias.fra_dat_cadasto,
mmn_franquias.fra_derramado_em_id,
mmn_franquias.fra_upline_id,
mmn_franquias.fra_lado_equipe_upline,
mmn_franquias.fra_saldo_pontos
FROM
mmn_franquias
ORDER BY
mmn_franquias.fra_dat_cadasto;
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET done_arr_rede1 = 1;
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET done_arr_rede2 = 1;
OPEN arr_rede1;
REPEAT
FETCH arr_rede1 INTO fra_id, fra_dat_cadasto, fra_derramado_em_id, fra_upline_id, fra_lado_equipe_upline, fra_saldo_pontos;
IF NOT done_arr_rede1 THEN
if locate(fra_upline,upline)>0 then
OPEN arr_rede2;
while done_arr_rede2 = 1 do
FETCH arr_rede2 INTO fra_id2, fra_dat_cadasto2, fra_derramado_em_id2, fra_upline_id2, fra_lado_equipe_upline2, fra_saldo_pontos2;
if fra_upline_id2 = fra_upline_id1 then
set done_arr_rede2 = 1;
set upline = concat (upline,',',fra_upline_id2);
set total_pontos = total_pontos + fra_saldo_pontos2;
end if;
end while;
CLOSE arr_rede2;
end if;
END IF;
UNTIL done END REPEAT;
CLOSE arr_rede1;
END
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.