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

PL/SQL Oracle Discussion :

Boucle sur la date le jour le mois et l'année


Sujet :

PL/SQL Oracle

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Boucle sur la date le jour le mois et l'année
    Bonjour,

    J'aimerais savoir quel code faut-il pour pouvoir afficher le jour le mois et l'année.
    Mon problème est que je n'ai pas d'info sur le jour, le mois, l'année donc j'ai pris les jours que contient 1 mois, les 12 mois, et une année quelconque pour effectuer une boucle. Mais j'ai l'impression que ça ne fonctionne pas!
    Quelqu'un pourrait-il m'aider?

    Merci d'avance.

  2. #2
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Je ne sais pas trop si je répond à côté de la plaque, mais si tu veux boucler sur une année sans avoir de table réelle contenant les dates, il existe ceci qui permet de faire défiler tous les jours de l'année en cours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WITH DATA AS
      (SELECT TRUNC(sysdate,'y')-1+LEVEL dt
      FROM  dual
      CONNECT BY LEVEL <= ADD_MONTHS(TRUNC(sysdate,'y'),12) - TRUNC(sysdate,'y') )
    SELECT  *
    FROM  DATA;

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    non non au contraire ça m'aide Merci ....On m'a un peu éclairé sur ce que je devais faire et donc Dans mon code j'ai rajouté l'heure en gros ça donne ça le code :

    Code sql : 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
     DECLARE
    	HEURE decimal(22);
    	DATE_EXACTE date;
    	JOUR decimal(22);
    	MOIS varchar2(8);
    	ANNEE varchar2(22);
    		CURSOR cur_h IS
    		select '1' as n from dual
    		union all
    		select '2' as n from dual
    		union all
    		select '3' as n from dual
    		union all
    		select '4' as n from dual
    		union all
    		select '5' as n from dual
    		union all
    		select '6' as n from dual
    		union all
    		select '7' as n from dual
    		union all
    		select '8' as n from dual
    		union all
    		select '9' as n from dual
    		union all
    		select '10' as n from dual
    		union all
    		select '11' as n from dual
    		union all
    		select '12' as n from dual
    		union all
    		select '13' as n from dual
    		union all
    		select '14' as n from dual
    		union all
    		select '15' as n from dual
    		union all
    		select '16' as n from dual
    		union all
    		select '17' as n from dual
    		union all
    		select '18' as n from dual
    		union all
    		select '19' as n from dual
    		union all
    		select '20' as n from dual
    		union all 
    		select '21' as n from dual
    		union all
    		select '22' as n from dual
    		union all
    		select '23' as n from dual
    		union all
    		select '0' as n from dual;
    		CURSOR cur_j IS
    		select 'lundi' as n from dual
    		union all
    		select 'mardi' as n from dual
    		union all
    		select 'mercredi' as n from dual
    		union all
    		select 'jeudi' as n from dual
    		union all
    		select 'vendredi' as n  from dual
    		union all
    		select 'samedi' as n  from dual
    		union all
    		select 'dimanche' as n from dual
    		CURSOR cur_m IS
    		select '01' as n from dual
    		union all
    		select '02' as n from dual
    		union all
    		select '03' as n from dual
    		union all
    		select '04' as n from dual
    		union all
    		select '05' as n  from dual
    		union all
    		select '06' as n  from dual
    		union all
    		select '07' as n from dual
    		union all
    		select '08' as n from dual
    		union all
    		select '09' as n from dual
    		union all
    		select '10' as n from dual
    		union all
    		select '11' as n from dual
    		union all
    		select '12' as n from dual ;	
     
     
    BEGIN 
     
    	FOR h in cur_h LOOP
    		heure := h.n;
    		INSERT INTO TEMPS_HEURE (heure)
    		VALUES (to_date(h.n ,'HH'));
    		FOR j in cur_j LOOP
    			jour := to_char(j.n) ;
    			INSERT INTO TEMPS_HEURE (jour) 
         		VALUES (to_char(jour,'D'));
    			FOR m in cur_m LOOP
    				mois := to_char(m.n);
    				INSERT INTO TEMPS_HEURE (mois)
    				VALUES (to_char(mois,'MM'));
    			END LOOP;
    		END LOOP;
    	END LOOP;
    	COMMIT;
    END;
    /

    je n'ai pas encore fait la boucle sur l'année car je voulais d'abord tester ce code mais ça me dit qu'il y a une erreur dans la boucle "h" et je ne la trouve pas! j'ai essayé de rajouter 'TO_DATE' mais ça me dit toujours qu'il y a une erreur dans la boucle.

  4. #4
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Il manque un ; à la fin de ton curseur cur_j

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CURSOR cur_j IS
    		SELECT 'lundi' AS n FROM dual
    		union ALL
    		SELECT 'mardi' AS n FROM dual
    		union ALL
    		SELECT 'mercredi' AS n FROM dual
    		union ALL
    		SELECT 'jeudi' AS n FROM dual
    		union ALL
    		SELECT 'vendredi' AS n  FROM dual
    		union ALL
    		SELECT 'samedi' AS n  FROM dual
    		union ALL
    		SELECT 'dimanche' AS n FROM dual;
    La variable JOUR doit être alphanumérique
    L'utilisation de COMMIT au sein d'une procédure n'est généralement pas conseillé, il vaut mieux laisser l'appelant faire la validation si tout le process s'est bien déroulé.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut
    Salut,

    D'autre part l'utilisation que vous faites autour de la variable jour me surprend.

    jour := to_char(j.n) ;
    INSERT INTO TEMPS_HEURE (jour)
    VALUES (to_char(jour,'D'));

    le curseur j me semble retourner des chaînes de caractères.
    Vous appliquez pourtant une fonction to_char sur ces chaînes.
    Ensuite vous appliquez à nouveau la fonction to_char sur jour.
    Je ne comprends pas comment cela fonctionne.

    D'autre part vous pourriez remplacer le curseur j_h par une simple boucle.

    Si cela fonctionne tant mieux.
    Pour le cas où votre code ne fonctionnerait pas que désirez vous faire exactement ?

    Pozzo

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    En fait je souhaitais faire afficher les jours, un mois, et une année mais c'est bon j'ai trouvé mon erreur....le problème venait du insert into
    Merci pour vos réponses

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

Discussions similaires

  1. [MySQL] Date du jour + x mois ou + x année
    Par Donald08 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/08/2008, 07h57
  2. Réponses: 2
    Dernier message: 30/01/2008, 18h19
  3. fonctions sur les dates : nb.jours.ouvres
    Par overider dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 06/09/2007, 15h02
  4. Réponses: 3
    Dernier message: 19/06/2007, 22h34
  5. date du jour - 1 mois
    Par yoda_style dans le forum ASP
    Réponses: 3
    Dernier message: 14/04/2005, 09h12

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