Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ricardo Bezerra

Ajuda com Function

Recommended Posts

Boa noite senhores!

Tenho uma function e, atualmente ela faz uma consulta entre os clientes de minha base de dados e, existe uma regra para trazer pelo id, o pedido que foi parcelado e não possui cancelamento. Atualmente, incluíram uma nova regra de negócio na empresa, onde passou a ser possível "reparcelar" um pedido, porém, existe (obrigatoriamente) um count e, por ser um campo de agregação, ele verifica o primeiro id, mas, o que eu precisava era que ele traga o campo mais atual (pela data).

Alguém pode dar uma força?

Grato desde já.

DROP FUNCTION IF EXISTS banking.F_VERIFICA_OPERACAO_JA_FOI_PARCELADA;
CREATE FUNCTION banking.`F_VERIFICA_OPERACAO_JA_FOI_PARCELADA`(`in_idt_fatura` int) RETURNS int(11)
BEGIN
    
  declare flg_ja_foi_parcelado bit(1) default 0;
  
  select count(1) 
 into flg_ja_foi_parcelado 
 from fno_parcelamento parc
 where parc.idt_fatura = in_idt_fatura
    limit 1;
    
    return flg_ja_foi_parcelado;
  
END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adiciona um order by decrescente pela data.

select count(1) 
 into flg_ja_foi_parcelado 
 from fno_parcelamento parc
 where parc.idt_fatura = in_idt_fatura
 order by campo_data desc
    limit 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia!

Ah! Boa.

O order by vai "sobrepor" o agrupamento do count, é isso?

O count iria fazer a ordenação pelo id e o order by vai "forçar" trazer pela data maior é isso?

Vou testar e, depois posto o result aqui.

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mandando a operação completa:

DROP FUNCTION IF EXISTS banking.f_verifica_operacao_parcelada;
CREATE FUNCTION banking.`F_VERIFICA_OPERACAO_PARCELADA_temp`(`in_idt_operacao` int) RETURNS varchar(1) CHARSET utf8
BEGIN
declare flg_existe_reg_parcelamento bit(1) default 0; 
   declare flg_parcelamento_efetivado bit(1) default 0; 
   declare flg_parcelamento_cancelado bit(1) default 0; 


select parc.flg_efetivado,
parc.flg_cancelado,
count(1) <> 0
 into flg_parcelamento_efetivado, 
flg_parcelamento_cancelado,
flg_existe_reg_parcelamento         
 from fno_parcelamento parc
inner join fno_fatura fat on parc.idt_fatura = fat.idt_fatura
    where fat.idt_operacao = in_idt_operacao
 order by parc.dta_cadastro desc
    limit 1;


if (flg_existe_reg_parcelamento) then
if(flg_parcelamento_cancelado) then
return 'N';
else
if(flg_parcelamento_efetivado) then
return 'P';
else
return 'A';
end if;
end if;
else
return 'N';
end if;


END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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