Bom dia Pessoal,
Tenho uma estrutura de tabela, que grava as condições de pagamento:
DESCRIÇÃO | PARCELAS | DIAS INICIO | INTERVALO
30/60/90 | 3 | 30 | 30
Eu queria fazer uma função, que calculasse (baseado em uma data pré-definida, por exemplo 03/11/2017) os dias de início (primeira parcela), e incrementasse o dias intervalo (conforme a quantidade de parcelas).
Alguém tem alguma noção de como fazer isso?
Obrigado!
Função Condição Pagamento
-
- Rank: DBA Pleno
- Mensagens: 232
- Registrado em: Ter, 19 Jun 2007 2:12 pm
- Localização: São Paulo - SP
bom dia jerry,
Veja se assim ajuda alguma coisa, fiz um teste simples e parece certo:
Veja se assim ajuda alguma coisa, fiz um teste simples e parece certo:
set serverout on size 1000000
declare
cursor c is
Select '30/60/90' DESCRICAO,
3 PARCELAS,
30 DIAS_INICIO,
30 INTERVALO
from dual;
c_r c%rowtype;
--
v_valor number(12,2) := 13000;
v_emissao date := trunc(sysdate);
v_vencimento date;
v_parcela number(12,2);
v_parcela_final number(12,2);
v_num_parcela number := 1;
--
Begin
open c;
fetch c into c_r;
if c%found then
v_parcela := trunc(v_valor/c_r.parcelas);
v_parcela_final := v_parcela + (v_valor - v_parcela * c_r.parcelas);
--
while v_num_parcela <= c_r.parcelas loop
--
if v_num_parcela = 1 then
v_vencimento := v_emissao + c_r.dias_inicio;
else
v_vencimento := v_vencimento + c_r.intervalo;
end if;
--
if v_num_parcela = c_r.parcelas then
dbms_output.put_line('Parcela '||to_char(v_num_parcela)||' vencimento '||to_Char(v_vencimento,'dd/mm/yyyy')||' valor '||to_char(v_parcela_final));
else
dbms_output.put_line('Parcela '||to_char(v_num_parcela)||' vencimento '||to_Char(v_vencimento,'dd/mm/yyyy')||' valor '||to_char(v_parcela));
end if;
--
v_num_parcela := v_num_parcela + 1;
end loop;
end if;
close c;
end;
/
Editado pela última vez por DanielNN em Ter, 07 Nov 2017 8:03 am, em um total de 1 vez.
Razão: Falta da TAG [CODE]
Razão: Falta da TAG [CODE]
-
- Moderador
- Mensagens: 641
- Registrado em: Seg, 03 Set 2007 3:26 pm
- Localização: Fortaleza - CE
att,
Daniel N.N.
Daniel N.N.
Opa,
fiz a consulta aqui (onde você pode criar uma função depois, ou ficar dentro do LOOP da consulta das condições) que traz os resultados das datas de vencimento considerando:
-uma certa data(:DATA_PREDEFINIDA)
-mais a quantidade de dias para a primeira parcela(:DIAS_PARA_INICIO)
-aí as próximas parcelas(:PARCELAS) seguirão a quantidade de dias de intervalo(:INTERVALO).
fiz a consulta aqui (onde você pode criar uma função depois, ou ficar dentro do LOOP da consulta das condições) que traz os resultados das datas de vencimento considerando:
-uma certa data(:DATA_PREDEFINIDA)
-mais a quantidade de dias para a primeira parcela(:DIAS_PARA_INICIO)
-aí as próximas parcelas(:PARCELAS) seguirão a quantidade de dias de intervalo(:INTERVALO).
SELECT x.dia DIA_VENCIMENTO
FROM (SELECT data_inicial + (:INTERVALO * (:PARCELAS - LEVEL)) dia
FROM (SELECT trunc(to_date(:DATA_PREDEFINIDA, 'dd/mm/rrrr')) + :DIAS_PARA_INICIO AS data_inicial FROM dual)
CONNECT BY LEVEL <= :PARCELAS) x
ORDER BY x.dia;
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes