IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Jours fériés+Oracle [Sources]


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 59
    Points : 37
    Points
    37
    Par défaut Jours fériés+Oracle
    salut
    je suis en train de developper un traitement qui s'execute chaque dernier jour de chaque moi, pour cela j'utilise oracle9i et forms6i, le probleme c que si le dernier jours du mois est un jours fériés ou un dimanche, ya t'il une idée bien optimisée pour travailler ?

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 59
    Points : 37
    Points
    37
    Par défaut
    Merci orafrance
    il ya une source que j'ai trouvé peut etre ca peut vous aider dans le future
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    CREATE OR REPLACE Function Mini(a IN FLOAT, b IN FLOAT) RETURN FLOAT
    AS
     
      f FLOAT;
     
    BEGIN
     
      IF a < b THEN
          f := a;
      ELSE
          f := b;
      END IF;
     
    RETURN f;
     
    END Mini;
    /
     
    -----------------------------------------------------------------------
    -- ================================================================= --
    -----------------------------------------------------------------------
     
    CREATE OR REPLACE Function Maxi(a IN FLOAT, b IN FLOAT) RETURN FLOAT
    AS
     
      f FLOAT;
     
    BEGIN
     
      IF a > b THEN
          f := a;
      ELSE
          f := b;
      END IF;
     
    RETURN f;
     
    END Maxi;
    /
     
    -----------------------------------------------------------------------
    -- ================================================================= --
    -----------------------------------------------------------------------
     
    CREATE OR REPLACE Function IsCorrectDate (JJ IN INTEGER, MM IN INTEGER, AAAA IN INTEGER) RETURN INTEGER 
    AS
     
      FlagReturn INTEGER;
     
    BEGIN
     
     
        -- Hors plage
        IF JJ < 1 OR JJ > 31 OR MM < 1 OR MM > 12 THEN
            FlagReturn := 0;
        ELSE
    	    -- Mois de 30 jours
    	    IF JJ = 31 AND (MM = 4 OR MM = 6 OR MM = 9 OR MM = 11) THEN
    		FlagReturn := 0;
    	    ELSE
    	    -- Mois de février
    	     IF MM = 2 THEN
    		 IF JJ <= 28 THEN
    		     FlagReturn := 1;
    		 ELSE
    		     IF JJ > 29 THEN
    			 FlagReturn := 0;
    		     ELSE  
    			 IF NOT (JJ = 29 And ((MOD(AAAA, 4) = 0 AND MOD(AAAA, 100) <> 0) Or MOD(AAAA, 400) = 0)) THEN
    			     FlagReturn := 0;
    			 ELSE
    			     FlagReturn := 1;
    			 END IF;    
    		     END IF;
    		 END IF;          
    	     ELSE -- mois autre que fevrier
    		FlagReturn := 1;
    	     END IF;
    	    END IF; 
         END IF;
     
        RETURN FlagReturn;
     
     
    END IsCorrectDate;
    /
     
    -----------------------------------------------------------------------
    -- ================================================================= --
    -----------------------------------------------------------------------
     
    CREATE OR REPLACE Function ConvertDate (dtDate IN DATE) RETURN VARCHAR2 
    AS
     
    	sJour VARCHAR2(2);
    	sMois VARCHAR2(2);
    	sResult VARCHAR2(4);
     
     
    BEGIN
     
     
      sJour := TO_CHAR(dtDate, 'DD');
      sMois := TO_CHAR(dtDate, 'MM');
     
      IF length(sJour) = 1 THEN
          sJour := '0' || sJour;
      END IF;
     
      IF length(sMois) = 1 THEN
          sMois := '0' || sMois;
      END IF;
     
      sResult := sJour || sMois;
     
      RETURN (sResult);
     
    END ConvertDate;
    /
     
    -----------------------------------------------------------------------
    -- ================================================================= --
    -----------------------------------------------------------------------
     
    CREATE OR REPLACE Function JourFerie (dtDate IN DATE, iSamediFerie IN INTEGER DEFAULT 1) RETURN VARCHAR2
    AS
     
     
    	lgA INTEGER;
    	lgMPaq INTEGER;
    	lgJPaq INTEGER;
    	lgTmp1 INTEGER; 
    	lgTmp2 INTEGER; 
    	lgTmp3 INTEGER;
    	stDate VARCHAR2(10);
    	dtPaq DATE;
    	stPaq VARCHAR2(10);
    	blFerie NUMBER(1);
    	stType VARCHAR2(2);
     
    BEGIN
     
    -- Cette fonction indique si le jour passé en argument est férié.
    -- Par défaut les samedi sont considérés comme fériés, mais le second
    -- paramètre permet de changer cela.
     
     
     stType := 'X';
    -- Dimanche (et samedi)
     
     
    IF iSamediFerie = 1 THEN
     
        IF TO_CHAR(dtDate, 'D') = 7 or TO_CHAR(dtDate, 'D') = 6 THEN
            blFerie := 1;
        ELSE
            blFerie := 0;
        END IF;
    ELSE
        IF TO_CHAR(dtDate, 'D') = 7 THEN
            blFerie := 1;
        ELSE
            blFerie := 0;
        END IF;
    END IF;
     
     
     
    IF blFerie = 1 THEN
        stType := 'WE';
    END IF;
     
    IF blFerie = 0 THEN
        stDate := ConvertDate(dtDate);
        -- Jours fériés fixes (1er janvier, 1er mai, 8 mai, 14 juillet, ...)
        IF stDate IN ('0101','0105','0805','1407','1508','0111','1111','2512') THEN
            blFerie := 1;
        END IF;
    END IF;
     
    IF blFerie = 0 THEN
     
        lgA := TO_CHAR(dtDate, 'YYYY');
        lgTmp1 := MOD((19 * MOD(lgA, 19) + 24), 30);
        lgTmp2 := Mini(lgTmp1, Maxi(28, lgTmp1) - 1);
        lgTmp3 := 28 + lgTmp2 - (MOD((3 + lgA - 1900 + ((lgA - 1900) / 4) + lgTmp2), 7));
        lgMPaq := 3 + (lgTmp3 / 32);
     
        IF (lgTmp3 < 32) THEN
        	  lgJPaq := lgTmp3;
        ELSE 
        	  lgJPaq := lgTmp3 - 31;
        END IF;
     
        -- Construction de la date du dimanche de Pâques
        stPaq := TO_CHAR(lgJPaq) || '/' || TO_CHAR(lgMPaq) || '/' || TO_CHAR(lgA);
        dtPaq := TO_DATE(stPaq, 'DD/MM/YYYY');
        -- Jours fériés mobiles (lundi de pâques, ascension, lundi de pentecôte)
        -- Pâques et Pentecôte non testés, puisqu'ils tombent tous les deux un dimanche.
     
        IF (dtDate = (dtPaq + 1)) OR (dtDate = (dtPaq + 39)) OR (dtDate = (dtPaq + 50)) THEN
            blFerie := 1;
        END IF;
     
    END IF;
     
    IF blFerie = 1 AND stType = 'X' THEN
        stType := 'JF';
    END IF;
     
     RETURN (stType);  
     
    END JourFerie;
    /

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Dates] Algorithme de jours fériés
    Par franfr57 dans le forum Langage
    Réponses: 18
    Dernier message: 13/05/2012, 16h38
  2. [Dates] Gestion d'un calendrier avec les jours fériés
    Par maximenet dans le forum Langage
    Réponses: 4
    Dernier message: 05/05/2006, 08h41
  3. Les jours fériés.
    Par davcha dans le forum Langage SQL
    Réponses: 8
    Dernier message: 18/01/2006, 14h03
  4. Réponses: 2
    Dernier message: 05/12/2005, 16h39
  5. Jours fériés
    Par djool dans le forum Access
    Réponses: 11
    Dernier message: 06/11/2004, 00h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo