- Este tópico contém 6 respostas, 3 vozes e foi atualizado pela última vez 2 anos, 3 meses atrás por reg.
-
AutorPosts
-
29 de agosto de 2022 às 4:27 pm #156954regParticipante
Boa tarde, pessoal!
Sou novo em SQL e PLsql, por isso, busca sua ajuda.
Preciso de uma function para calcular se o periodo aquisitivo de férias corresponde a 1 ano. Obs: precisa calcular para todos os períodos aquisitivos do funcionário.
Envio abaixo function que montei.create or replace function calculo_total_dias (p_func_id in number)
return varchar isv_tot_dias number;
v_retornavalor varchar2(500);Begin
select sum((nvl( r.fimper, sysdate) – r.iniper)+ 1)total_dias
into v_tot_dias
from rp_reg_ferias r
where r.func_id = p_func_id;if v_tot_dias = 365 then
v_retornavalor := ‘periodo aquisitivo completo’;else v_retornavalor := ‘periodo aquisitivo incompleto’;
end if;
return v_retornavalor;
end calculo_total_dias;
29 de agosto de 2022 às 7:10 pm #156956José Laurindo ChiappaModeradorBlz ? Então, vamos comentar/criticar o seu código, Justamente pra tentar te dar a orientação que vc precisa e vc poder melhorar…
Bem, não conhecemos a sua modelagem, mas SUPONDO que REALMENTE um funcionário PODE ter vários períodos nessa tabela RP_REG_FERIAS e que as colunas FIMPER e INIPER ** REALMENTE ** são o fim e o início do período ok, o cálculo de intervalor de dias está correto E a soma de dias também… Falando de questões técnicas, o ponto que eu RECOMENDO que vc revise é essa comparação de 365 dias – por causa de anox bissextos nós podemos SIM ter um ano com 366 dias, com CERTEZA tua lógica de “v_tot_dias = 365 ” NÃO VAI PEGAR esses casos….A única Dúvida que fica aqui NÃO É técnica, não é de PL/SQL mas sim de lógica : não conheço regras de RH mas me parece, pelo pouco que ouvi falar, que na verdade CASO a soma de dias de intervalo seja MAIOR que um ano, o funcionário TEM SIM DIREITO, então imho a comparação deveria ser :
v_tot_dias >= 365
O que Já pegaria o caso de anos bissextos, right ???
Obs : não é nada Exigível e que faça tanta diferença, mas Saiba que se vc quiser vc absolutamente não precisa de ter uma variável só pra guardar o valor de retorno, vc poderia codificar :
…
if v_tot_dias = 365 then
return ‘periodo aquisitivo completo’;
else
return ‘periodo aquisitivo incompleto’;
end if;end calculo_total_dias;
Abraços,
José Laurindo Chiappa
30 de agosto de 2022 às 11:39 am #156975regParticipanteOlá! Bom dia!
Obrigado pelos comentários/críticas do código.
Ajudou bastante. Compilado com sucesso!30 de agosto de 2022 às 2:16 pm #156981José Laurindo ChiappaModeradorTudo jóia ? Então, veja que COMPILADO COM SUCESSO absolutamente não Isenta de bugs de lógica – não deixe de CONFIRMAR se, como eu disse, realmente não deveria ser v_tot_dias MAIOR OU IGUAL a 365 , e não IGUAL apenas como vc codificou, e CONFIRME que realmente todos os períodos são retornados se vc fizer a consulta sem o SUM….
Isso ok, tá jóia, fofoca feita…Abraços,
Chiappa
30 de agosto de 2022 às 11:14 pm #156996MottaParticipanteSugiro você levantar melhor a questão , no RH ou com alguém que conheça a legislação (1), tive de adequar o relatória de férias onde trabalho na pandemia , só o relatório pois o ERP faz o cálculo , e já tinnha n capa pi poréns , a SP no fim deve ser o problema menor.
1 é o Sistena de sua empresa ou um sistema de rh geral ?
6 de setembro de 2022 às 4:46 pm #157131regParticipanteBoa tarde!
Realmente o v_tot_dias deve ser >= 365.
Obrigado pela dica.
Att,
Reginaldo.6 de setembro de 2022 às 4:49 pm #157132regParticipanteBoa tarde!
Trata-se de um sistema em fase de desenvolvimento.
Obrigado pela dica!
Att,
Reginaldo. -
AutorPosts
- Você deve fazer login para responder a este tópico.