|
Forums, dernières contributions
Jours fériés en pl/sql ? |
|
Forums, dernières contributions
Jours fériés en pl/sql ? fab
Bonjour,
Dans un état de reporting j'ai besoin de connaitre les jours fériés; bien sur comme c'est variable d'une année sur l'autre et d'un pays à l'autre cette fonctionnalité n'est pas disponible dans Oracle. C'est pour ça que je demande si l'un d'entre vous a déjà travaillé ou possède une fonction en PL/SQL qui donne les jours fériés ? fab
Merci pour ta réponse complète, je vais essayer de décrypter tout ça ;-)
las
slt,
voici un autre algo(de OUDIN) bcp plus simple qui est basé sur la division entière. La donction retourne le dimanche de päques (en date) elle est ecrite ici en C++/CLI mais tu peux l'adapter a tt c que tu veux DateTime EasternSunday(int vnYear) { int G, C, C_4, E, H, K, P, Q, I, B, J1, J2, R; DateTime eSunday; G = vnYear % 19; C = (int)(vnYear / 100.0); C_4 = (int)(C / 4.0); E =(int)((8 * C + 13) /25.0); H = (19 * G + C - C_4 - E + 15) % 30; K = (int)(H /28.0); P = (int)(29 /(H + 1)); Q = (int)((21 - G) / 11.0); I = (K * P * Q - 1) * K + H; B = (int)(vnYear /4.0) + vnYear; J1 = B + I + 2 + C_4 - C; J2 = J1 % 7; R = 28 + I - J2; if (R <= 31) eSunday = System::Convert::ToDateTime(R.ToString() + '/3/' + vnYear.ToString()); else eSunday = System::Convert::ToDateTime((R - 31).ToString() + '/4/' + vnYear.ToString()); return eSunday; } Il suiffit ensuite de determiner les autres jours ferie(reliieux) comme suit: LundiPaque = DimachePaque+1jrs JeudiAscension = DimanchePaque+39jrs (' le jeudi de la sixième semaine après Pâques) DimanchePentecote = DimanchePaque + 49jrs ( le septième dimanche après Pâques) LundiPentecote = DimanchePentecote.AddDays+1jr Assomption = 15 Aout (Ferie catholique et pas ferie pour les protestant) VendredSaint = DimmanchePaque-2js(Ferie protestant et pas fere pr les catholique)... Gamouh Said
Bonjour,
Ci-dessous une fonction PL/SQL qui permet de vérifier si un jour est férrié ou non. CREATE OR REPLACE Function WRK.F_IsFerie (dtDate DATE, FL_Week_Ferie NUMBER ) RETURN NUMBER -- Fonction qui prend en paramètre deux variables: -- dtDate: Date -- FL_Week_Ferie : Flag permettant de dire si le week end peut etre considèré comme jour férié ou pas. -- FL_Week_Ferie = 1 => Oui -- FL_Week_Ferie = 0 => Non AS lgTmp1 INTEGER; lgTmp2 INTEGER; stDate VARCHAR2(10); stType NUMBER; Annee NUMBER(4); Lundi_paques VARCHAR2(10); Lundi_pencote VARCHAR2(10); Ascension VARCHAR2(10); Num_jour NUMBER :=0; BEGIN stType := 0; lgTmp1:=0; lgTmp2:=0; stDate := F_ConvertDate(dtDate); Annee := TO_CHAR(dtDate, 'YYYY'); Lundi_paques := F_ConvertDate(F_Dimanche_de_Paques(Annee)+1); --'Lundi de paqûes' , Lundi_pencote := F_ConvertDate(F_Dimanche_de_Paques(Annee) + 50); --' Lundi de Pencote', Ascension := F_ConvertDate(F_Dimanche_de_Paques(Annee) + 39); --' Ascension' -- Jours fériés fixes -- Nouvel AN 1er janvier -- Fête du travail 1er mai -- Victoire 8 mai -- Fête nationale 14 juillet -- Assomption 15 Aout -- Toussaint 1er Novemmbre -- Armistice 11 Novembre -- Noêl 25 Décembre -- Lundi de paqûes -- Lundi de pencote -- Ascension IF (stDate IN ('0101','0105','0805','1407','1508','0111','1111','2512',Lundi_paques,Lundi_pencote,Ascension)) THEN lgTmp1 := 1; end if; IF FL_Week_Ferie = 1 THEN Num_jour := TO_CHAR(dtDate,'D'); IF Num_jour > 5 THEN lgTmp2:= 1; ELSE lgTmp2:= 0; END IF; END IF; IF lgTmp1 Towandaa
thank you so muche for the function ECCLECTICA!
|





