1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| create OR REPLACE FUNCTION controle(cd_collab number) retrun nbe_jours is
cursor cur_collab is
SELECT a.cd_collab,cd_absence,dat_deb,dat_fin
INTO collab,datd,datf
from absence a,demande_absence d
where d.CD_DEM_ABS=a.CD_DEM_ABS
and d.CD_ETAT= 4
and a.CD_MOTIF in (2,3)
and d.DAT_DEMANDE >='01/02/2012'
order by d.cd_collab,cd_absence asc
var_collab cur_collab%rowTYPE;
var_absence cur_collab%rowTYPE;
BEGIN
loop
// ici je veux selectionner la date de fin la plus grande de chaque collaborateur (exp pour le cd_collab 175 prendre la date 03/07/2012
select max(dat_fin) from cur_collab where cd_collab= var collab ;
if max(dat_fin) = dat_deb -1 then
nbr_jours := dat_fin - dat_deb;
else
nbr_jours := dat_fin -dat_deb;
end if ;
return nbr_jours |
Partager