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

SQL Oracle Discussion :

Faire un calendrier avec les jours correspondant


Sujet :

SQL Oracle

  1. #1
    Invité
    Invité(e)
    Par défaut Faire un calendrier avec les jours correspondant
    Bonjour,
    aidez moi s'il vous plait.
    Je vais faire un calendrier et mon souci ce de rendre les jours dynamiques en fonction du changement du moi.
    Je vais à ce que par exemple si le premier ( 1er ) de ce moi est un Mardi, que sa m'affiche le 1er et le jour "Mardi".
    j'ai déjà fait le calendrier , c la correspondance aux jours qui reste.



    Merci d'avance!!!





    Cordialement!

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    Quel genre de calendrier? C'est dans un IHM? En requête SQL? Pourriez-vous donner plus de détails?
    Merci

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    le calendrier c'est un planning.C'est à dire pour chaque mois.
    Quand je deroule ma liste des mois de l'année pour choisir le mois en cours, il doit m'afficher du 1er du mois au 30 ou 31 et je vais à ce que sa m'affiche les jours correspondant.



    merci!

  4. #4
    Invité
    Invité(e)
    Par défaut
    C'est dans une procedure pl/sql.

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT LEVEL, TO_CHAR(TO_DATE('01.'|| :p_mois, 'DD.MM.RRRR') + LEVEL - 1, 'FMDay', 'NLS_DATE_LANGUAGE=French') jour
    FROM dual
    CONNECT BY LEVEL <= EXTRACT(DAY FROM LAST_DAY(TO_DATE('01.'|| :p_mois, 'DD.MM.RRRR')))
    Avec :p_mois = 'Mois.Année' exemple '09.2020'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    LEVEL	JOUR
    1	Mardi
    2	Mercredi
    3	Jeudi
    ...
    28	Lundi
    29	Mardi
    30	Mercredi
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    bonjour,

    Comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    with tab1(Cnum, Cdat) as
        (select 1
              , cast('01-JAN-20' as date)
         from dual
         union all
         select Cnum + 1
              , Cdat + interval '-1' day
         from tab1
         where Cnum <100
        )
    select Cdat
         , TO_CHAR(Cdat, 'DY') as Xdat
         , case when substr(TO_CHAR(Cdat), 01, 02)='01' then 1 else 0 end as Prem
    from tab1

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour Mr McM,
    Merci.

    Avec cette procedure comment je peux l'inserer?

    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
       PROCEDURE proc_dates_mois IS
     
      cursor c_calendrier is
      select *
      from CALENDRIER
      where annee=:ENTETE.ANNEE
      AND mois=:ENTETE.MOIS;
     
      r_calendrier c_calendrier%ROWTYPE;
     
      v_premier date;
      v_dernier varchar2(10);
      v_date_dernier number;
      v_date number;
      v_date_jour date;
      v_jour_premier number;
     
    BEGIN
     
     if :entete.mois is not null and :entete.annee is not null then
    			 go_block('DATES');
    			 clear_block;
     
    	select to_date('01/'||:entete.mois||'/'||:entete.annee,'DD/MM/YYYY') into v_premier
      from dual;
     
      v_dernier := f_date_dernier_jour(:ENTETE.MOIS);
      v_date_dernier := v_dernier;
      v_jour_premier := to_char(v_premier,'D');
     
     end if; 
      -- Determination du Jour du 1er du mois : Jour de la semaine sur lequel tombe ler du mois
     
      if v_jour_premier = 1 then :j1 := 1;
    	  elsif v_jour_premier = 2 then :j2 := 1 ;
    	  elsif v_jour_premier = 3 then :j3 := 1 ;
    	  elsif v_jour_premier = 4 then :j4 := 1 ;
    	  elsif v_jour_premier = 5 then :j5 := 1 ;
    	  elsif v_jour_premier = 6 then :j6 := 1 ;
    	  elsif v_jour_premier = 7 then :j7 := 1 ; 
      end if;
     
     
      FOR v_date in 2..31
      LOOP
      	if v_jour_premier + v_date - 1 = 2 then :j2 := v_date;
      	elsif v_jour_premier + v_date - 1 = 3 then :j3 := v_date;
      	elsif v_jour_premier + v_date - 1 = 4 then :j4 := v_date;
      	elsif v_jour_premier + v_date - 1 = 5 then :j5 := v_date;
      	elsif v_jour_premier + v_date - 1 = 6 then :j6 := v_date;
      	elsif v_jour_premier + v_date - 1 = 7 then :j7 := v_date;
      	elsif v_jour_premier + v_date - 1 = 8 then :j8 := v_date;
      	elsif v_jour_premier + v_date - 1 = 9 then :j9 := v_date;
      	elsif v_jour_premier + v_date - 1 = 10 then :j10 := v_date;
      	elsif v_jour_premier + v_date - 1 = 11 then :j11 := v_date;
      	elsif v_jour_premier + v_date - 1 = 12 then :j12 := v_date;
      	elsif v_jour_premier + v_date - 1 = 13 then :j13 := v_date;
      	elsif v_jour_premier + v_date - 1 = 14 then :j14 := v_date;
      	elsif v_jour_premier + v_date - 1 = 15 then :j15 := v_date;
      	elsif v_jour_premier + v_date - 1 = 16 then :j16 := v_date;
      	elsif v_jour_premier + v_date - 1 = 17 then :j17 := v_date;
      	elsif v_jour_premier + v_date - 1 = 18 then :j18 := v_date;
      	elsif v_jour_premier + v_date - 1 = 19 then :j19 := v_date;
      	elsif v_jour_premier + v_date - 1 = 20 then :j20 := v_date;
      	elsif v_jour_premier + v_date - 1 = 21 then :j21 := v_date;
      	elsif v_jour_premier + v_date - 1 = 22 then :j22 := v_date;
      	elsif v_jour_premier + v_date - 1 = 23 then :j23 := v_date;
      	elsif v_jour_premier + v_date - 1 = 24 then :j24 := v_date;
      	elsif v_jour_premier + v_date - 1 = 25 then :j25 := v_date;
      	elsif v_jour_premier + v_date - 1 = 26 then :j26 := v_date;
      	elsif v_jour_premier + v_date - 1 = 27 then :j27 := v_date;
      	elsif v_jour_premier + v_date - 1 = 28 then :j28 := v_date;
      	elsif v_jour_premier + v_date - 1 = 29 then :j29 := v_date;
      	elsif v_jour_premier + v_date - 1 = 30 then :j30 := v_date;
      	elsif v_jour_premier + v_date - 1 = 31 then :j31 := v_date;
      	elsif v_jour_premier + v_date - 1 = 32 then :j32 := v_date;
      	elsif v_jour_premier + v_date - 1 = 33 then :j33 := v_date;
      	elsif v_jour_premier + v_date - 1 = 34 then :j34 := v_date;
      	elsif v_jour_premier + v_date - 1 = 35 then :j35 := v_date;
      	elsif v_jour_premier + v_date - 1 = 36 then :j36 := v_date;
      	elsif v_jour_premier + v_date - 1 = 37 then :j37 := v_date;	
      	end if;
     
      	exit when v_date = to_number(v_date_dernier);
      END LOOP;
     
     
      open c_calendrier;
      fetch c_calendrier into r_calendrier;
     
      if c_calendrier%notfound then
      	 insert into CALENDRIER
         values (:ENTETE.ANNEE, :ENTETE.MOIS,
    	 :j1,:j2,:j3,:j4,:j5,:j6,:j7,:j8,:j9,:j10,:j11,:j12,:j13,:j14,:j15,:j16,:j17,:j18,:j19,:j20,:j21,:j22, 
      				:j23,:j24,:j25,:j26,:j27,:j28,:j29,:j30,:j31,:j32,:j33,:j34,:j35,:j36,:j37); 
      				commit;
      end if;
     
      close c_calendrier;
     
    end;



    cordialement!

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    La définition de ta table calendrier modifie la façon de gérer, vu que tu gères par semaine
    D'autre part, c'est inutile de faire tous les calculs pour arriver à ton test sur Calendrier%Not_found
    Evite les curseurs pour vérifier l'existence d'une ligne dans une table : Soit tu fais un select exception when no_data_found, soit tu insères et tu gères l'exception DUP_VAL_ON_INDEX

    Voici une façon de faire, l'autre façon c'est avec PIVOT, mais vu que j'ai l'impression que tu es sous Forms, pas sûr que ça fonctionne.
    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
    DECLARE
    	v NUMBER;
    BEGIN
      SELECT 1 INTO v
      FROM CALENDRIER
      WHERE annee = :ENTETE.ANNEE
      AND mois = :ENTETE.MOIS;
     
    	INSERT INTO CALENDRIER(....)
      SELECT :ENTETE.ANNEE, :ENTETE.MOIS, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15, j16, j17, j18, j19, j20, j21, j22, j23, j24, j25, j26, j27, j28, j29, j30, j31, j32, j33, j34, j35, j36, j37
      FROM (
      SELECT num, 
            lead(jj, 0) OVER (ORDER BY num) j1, 	lead(jj, 1) OVER (ORDER BY num) j2, lead(jj, 2) OVER (ORDER BY num) j3, lead(jj, 3) OVER (ORDER BY num) j4, lead(jj, 4) OVER (ORDER BY num) j5, lead(jj, 5) OVER (ORDER BY num) j6, lead(jj, 6) OVER (ORDER BY num) j7,
            lead(jj, 7) OVER (ORDER BY num) j8, 	lead(jj, 8) OVER (ORDER BY num) j9, lead(jj, 9) OVER (ORDER BY num) j10, lead(jj, 10) OVER (ORDER BY num) j11, lead(jj, 11) OVER (ORDER BY num) j12, lead(jj, 12) OVER (ORDER BY num) j13, lead(jj, 13) OVER (ORDER BY num) j14,
            lead(jj, 14) OVER (ORDER BY num) j15, lead(jj, 15) OVER (ORDER BY num) j16, lead(jj, 16) OVER (ORDER BY num) j17, lead(jj, 17) OVER (ORDER BY num) j18, lead(jj, 18) OVER (ORDER BY num) j19, lead(jj, 19) OVER (ORDER BY num) j20, lead(jj, 20) OVER (ORDER BY num) j21,
            lead(jj, 21) OVER (ORDER BY num) j22, lead(jj, 22) OVER (ORDER BY num) j23, lead(jj, 23) OVER (ORDER BY num) j24, lead(jj, 24) OVER (ORDER BY num) j25, lead(jj, 25) OVER (ORDER BY num) j26, lead(jj, 26) OVER (ORDER BY num) j27, lead(jj, 27) OVER (ORDER BY num) j28,
            lead(jj, 28) OVER (ORDER BY num) j29, lead(jj, 29) OVER (ORDER BY num) j30, lead(jj, 30) OVER (ORDER BY num) j31, lead(jj, 31) OVER (ORDER BY num) j32, lead(jj, 32) OVER (ORDER BY num) j33, lead(jj, 33) OVER (ORDER BY num) j34, lead(jj, 34) OVER (ORDER BY num) j35, lead(jj, 35) OVER (ORDER BY num) j36,
            lead(jj, 36) OVER (ORDER BY num) j37
      FROM (
        SELECT LEVEL num,
            CASE WHEN TO_CHAR(TRUNC(TO_DATE('01.'|| :ENTETE.MOIS ||'.'|| :ENTETE.ANNEE, 'DD.MM.RRRR'), 'IW') + LEVEL - 1, 'MM.RRRR') = :ENTETE.MOIS ||'.'|| :ENTETE.ANNEE	
                  THEN EXTRACT( DAY FROM TRUNC(TO_DATE('01.'|| :ENTETE.MOIS ||'.'|| :ENTETE.ANNEE, 'DD.MM.RRRR'), 'IW') + LEVEL - 1) ELSE NULL END jj
        FROM dual
        CONNECT BY LEVEL <= 37
        ))
      WHERE num = 1;
     
    	COMMIT;
     
    EXCEPTION WHEN NO_DATA_FOUND THEN NULL;
    END;
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    ça n'a pas marché, il ya toujours des erreurs qui ne finissent pas au niveau de l'utilisation de LEAD( ) et OVER.
    Au faite mon premier code marche bien, le calendrier s'affiche mais mon souci ce d'ajouter un code qui permet d'afficher les jours(lundi,mardi....dimanche) dynamiquement en fonction des dates du mois choisi (par exemple si le premier c'est un mardi il doit m'afficher :Mardi et le 1er..

    voila une capture de ce qui marche avec les jours en libellé fixe par semaine
    Nom : Capture.GIF
Affichages : 441
Taille : 43,7 Ko






    Merci!

Discussions similaires

  1. Calendrier perpetuel - Problème avec les jours fériés
    Par Theboobasparks dans le forum Excel
    Réponses: 2
    Dernier message: 30/01/2019, 11h00
  2. comment creer une colonne avec les jours du mois
    Par Daniela dans le forum Access
    Réponses: 1
    Dernier message: 17/10/2006, 11h34
  3. remplir une table avec les jours du mois
    Par david06600 dans le forum Langage
    Réponses: 6
    Dernier message: 04/08/2006, 10h29
  4. [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
  5. Remplissage table avec les jours d'un mois
    Par tomtom25 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/05/2005, 14h32

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