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 :

Récuperer les jours du mois en cours


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 12
    Points : 5
    Points
    5
    Par défaut [Résolu] Récuperer les jours du mois en cours
    Je souhaiterais faire Proc stock qui me permette de récuperer les jours (en format date 'JJ/MM/AAAA') dans un VARRAY. Comment pourrais-je faire ? dois-je utiliser un curseur ? ou est ce qu'il y a une formule (fonction) magique qui fait ça.
    Dans un 2ème temps, de la même manière je voudrais récuperer les jours du mois précédent.
    Merci pour vos conseils

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut Re: Récuperer les jours du mois en cours
    Citation Envoyé par mindwind
    Je souhaiterais faire Proc stock qui me permette de récuperer les jours ...
    les jours de quoi ?
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Pour récuperer les jours du mois en cours.
    Je pense partir vers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TO_DATE('01/' || TO_CHAR(premier_jour, 'mm/yyyy'), 'dd/mm/yyyy')as premier_jour_du_mois
    puis faire une boucle jusqu'au dernier jour.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TO_DATE('01/' || TO_CHAR(ADD_MONTHS(maDate, 1), 'mm/yyyy'), 'dd/mm/yyyy') - 1 as dernier_jour_du_mois

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Voici une requête qui donne le premier et le dernier jour du mois en cours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TRUNC(SYSDATE, 'MONTH') "FIRST DAY", Trunc(LAST_DAY(SYSDATE)) "LAST DAY" FROM DUAL;
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Oh puré, c'est magique cette requête, faut dire que je suis encore débutant, alors à chaque nouvelle requete, c'est une découverte de plus.
    Merci beaucoup, je devrais m'en sortir à présent.

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Et pour avoir tous les jours du mois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TRUNC(SYSDATE, 'MONTH') + (ROWNUM - 1)
    FROM DUAL
    CONNECT BY TRUNC(SYSDATE, 'MONTH') + (ROWNUM - 1) <= TRUNC(LAST_DAY(SYSDATE))
    Ne marche qu'avec 9i (et encore pas avec la 9.2.0.1.0)
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  7. #7
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Cette requête s'arrête au 25/12 ?!... (9.0.1.3)
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  8. #8
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Excellent, c'est exactement ce que je voulais. J'étais partis dans le forum pour m'aider, mais apparement, y a plus rapide et plus experimenté.
    Reste plus qu'a le mettre dans un VARRAY
    Merci beaucoup.

  9. #9
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par SheikYerbouti
    Cette requête s'arrête au 25/12 ?!... (9.0.1.3)
    Désolé, je n'ai pas toutes les versions pour tester, mon cher Zappa-Fan

    Est-ce que la requête suivante se comporte bien ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ROWNUM
    FROM DUAL
    CONNECT BY ROWNUM < 10
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  10. #10
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Oui, celle-ci est parfaite.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  11. #11
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Chez moi,, j'ai tous les jours du mois , jusqu'au 31.
    V 9.2.0.7

  12. #12
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par SheikYerbouti
    Oui, celle-ci est parfaite.
    : Je n'ai pas d'explication :

    Si tu as le temps de faire quelques recherches tiens-nous au courant
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  13. #13
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Je reviens vers vous car j'ai encore un blème, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DECLARE  
    		 TYPE TAB_DATE IS VARRAY (31) OF DATE ;
    		 TAB_JOURNEE_POSTALE TAB_DATE;
    BEGIN
    	 FOR i IN (TRUNC(SYSDATE, 'MONTH') + (ROWNUM - 1))..(TRUNC(LAST_DAY(SYSDATE))) LOOP
    	 	TAB_JOURNEE_POSTALE(i) := to_char(i);
    	 END LOOP;
    END;
    Je veux mettre les dates des jours du mois en cours dans une collection de type VARRAY. J'ai essayé d'adapter à l'exemple trouvé dans :
    http://sheikyerbouti.developpez.com/pl_sql/?page=Chap5

    Mais ça ne marche pas

  14. #14
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    1. votre collection n'est pas initialisée (vous n'avez pas tout lu...)

    2. l'indice d'un Varray est de type numérique, hors vous utilisez i de type date.

    utilisez une variable supplémentaire (j) initialisée à 1 et incrémentée à chaque passage de boucle.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  15. #15
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Voici une suggestion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Declare
      TYPE TYP_V is varray(31) of DATE ;
      tab  TYP_V := TYP_V();
      -- Curseur sur les jours --
      Cursor CC IS
      SELECT TRUNC(SYSDATE, 'MONTH') + (ROWNUM - 1) JOUR 
      FROM DUAL 
      CONNECT BY TRUNC(SYSDATE, 'MONTH') + (ROWNUM - 1) < TRUNC(LAST_DAY(SYSDATE)) ;
    Begin  
      For Cur IN CC Loop
         tab.extend ;
    	 tab(CC%ROWCOUNT) := Cur.jour ;
      End loop ;
    End ;
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  16. #16
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    J'ai essayé ta proposition mais ça ne boucle pas, il y a juste le premier jour du mois qui est renvoyé.
    Manquerais pas une variable d'incrémentation ?
    J'ai l'impression que ça ne prend pas la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONNECT BY TRUNC(SYSDATE, 'MONTH') + (ROWNUM - 1) < TRUNC(LAST_DAY(SYSDATE)) ;
    de la requête

  17. #17
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Oui, d'une version à l'autre de la base le résultat n'est pas le même.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  18. #18
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Votre solution me semble un peu compliquée... Voilà une solution qui marche quelque soit la version d'oracle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    declare
      TYPE TYP_V is varray(31) of DATE ; 
      tab  TYP_V := TYP_V(); 
    begin
       for i in 1..to_number (to_char(last_day(sysdate), 'DD')) loop
             tab.extend; 
             tab(i) := trunc(sysdate, 'MM') + i-1;
             dbms_output.put_line (tab(i));
       end loop;
    end;
    [EDIT] Un post qui pourrait t'intéresser :
    http://www.developpez.net/forums/vie...hlight=sysdate
    [/EDIT]
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  19. #19
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Oeuf Corse PlaineR
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  20. #20
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Forcément, c'est plus simple comme ça.
    En tout cas, merci beaucoup pour vos lumières.

    Pour avoir les jours du mois précédent, dois je passer par une convertion de date ou est-ce qu'il y a une fonction magique ?
    un truc pour faire 'MM' - 1
    Je sais, je rêve beaucoup, mais bon...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. remplir une table avec les jours du mois
    Par david06600 dans le forum Langage
    Réponses: 6
    Dernier message: 04/08/2006, 10h29
  2. N'afficher que les données du mois en cours
    Par faiglon dans le forum Access
    Réponses: 5
    Dernier message: 25/07/2006, 13h17
  3. Dernier Jours du mois en cours
    Par paradeofphp dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/06/2006, 19h55
  4. Réponses: 4
    Dernier message: 09/04/2006, 17h01
  5. Affichez les enregistrements du mois en cours ?
    Par Koala-Prog dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/08/2003, 15h14

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