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 :

afficher tous les jours d'une année


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 115
    Par défaut afficher tous les jours d'une année
    Salut à tous,

    je suis un new commer sous oracle. J'aurai une petite question: Comment pourrait-on faire afficher tous les jours d'une année donnée sous oracle, rien qu'en utilisant du SQL?
    Par exemple pour 2008:
    01-01-08
    02-01-08
    ....
    31-12-08

    Merci d'avance

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    L'idée c'est d'avoir une table calendrier, mais tu peux adapter cette requête pour la générer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select to_date('01/01/2008','dd/mm/yyyy') + (level-1) as jour
    from dual
    connect by level<367

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 115
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    L'idée c'est d'avoir une table calendrier, mais tu peux adapter cette requête pour la générer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select to_date('01/01/2008','dd/mm/yyyy') + (level-1) as jour
    from dual
    connect by level<367
    Super ton idee, mais serait-il possible de resoudre le truc sans toutefois utiliser le "connect by"?

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    En utilisant une fonction pipelined :
    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
    CREATE OR REPLACE TYPE numtab_type IS TABLE OF NUMBER;
    /
     
    CREATE or replace FUNCTION rowgen(pin_nor IN NUMBER)
    RETURN numtab_type DETERMINISTIC PIPELINED
    AS
    BEGIN
      FOR i IN 1..pin_nor
      LOOP
        PIPE ROW(i);
      END LOOP;
     
      RETURN;
    END rowgen;
    /
     
    SELECT to_date('01/01/2008','dd/mm/yyyy') + ROWNUM -1 as jour
    FROM TABLE(rowgen(366))
    /

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 115
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    En utilisant une fonction pipelined :
    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
    CREATE OR REPLACE TYPE numtab_type IS TABLE OF NUMBER;
    /
     
    CREATE or replace FUNCTION rowgen(pin_nor IN NUMBER)
    RETURN numtab_type DETERMINISTIC PIPELINED
    AS
    BEGIN
      FOR i IN 1..pin_nor
      LOOP
        PIPE ROW(i);
      END LOOP;
     
      RETURN;
    END rowgen;
    /
     
    SELECT to_date('01/01/2008','dd/mm/yyyy') + ROWNUM -1 as jour
    FROM TABLE(rowgen(366))
    /
    comme je le disais plus hautm la PL/SQL aussi n'etait pas permis
    Encore merci pour tes propositions

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    C'est quoi ta problématique? C'est scolaire ?
    Le connect by c'est du pur SQL, sinon regarde le lien de mon autre post il y a aussi GROUP BY CUBE.
    Par contre sur oracle la CTE (with) n'est pas (encore) récursive donc pas de génération de lignes possible.

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    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
    SQL> select * from v$version;
     
    BANNER
    ----------------------------------------------------------------
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
    PL/SQL Release 10.2.0.1.0 - Production
    CORE	10.2.0.1.0	Production
    TNS for Linux: Version 10.2.0.1.0 - Production
    NLSRTL Version 10.2.0.1.0 - Production
     
     
    SQL> create user cal identified by cal;
     
    Utilisateur cree.
     
    SQL> grant create session to cal;
     
    Autorisation de privileges (GRANT) acceptee.
     
    SQL> connect cal/cal
    Connecte.
    SQL> select to_date('01/01/2008','dd/mm/yyyy') + rownum - 1 as jour
      2  from all_objects
      3  where rownum < 367;

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 115
    Par défaut
    Citation Envoyé par pifor Voir le message
    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
    SQL> select * from v$version;
     
    BANNER
    ----------------------------------------------------------------
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
    PL/SQL Release 10.2.0.1.0 - Production
    CORE	10.2.0.1.0	Production
    TNS for Linux: Version 10.2.0.1.0 - Production
    NLSRTL Version 10.2.0.1.0 - Production
     
     
    SQL> create user cal identified by cal;
     
    Utilisateur cree.
     
    SQL> grant create session to cal;
     
    Autorisation de privileges (GRANT) acceptee.
     
    SQL> connect cal/cal
    Connecte.
    SQL> select to_date('01/01/2008','dd/mm/yyyy') + rownum - 1 as jour
      2  from all_objects
      3  where rownum < 367;
    c'est exactement un truc pareil dont j'avais besoin!

    Merci encore à vous

  9. #9
    Membre chevronné Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Par défaut
    Sans remettre en cause la requete donnee par Pierre, deux remarques :
    1. il peut etre extremement couteux d'interroger all_objects surtout en production et s'il y a baucoup d'objets
    2. toutes les annees n'ont pas le meme nombre de jours...

    Nicolas.

  10. #10
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par NGasparotto Voir le message
    Sans remettre en cause la requete donnee par Pierre, deux remarques :
    1. il peut etre extremement couteux d'interroger all_objects surtout en production et s'il y a baucoup d'objets
    2. toutes les annees n'ont pas le meme nombre de jours...

    Nicolas.
    et puis avec un peu de malchance, tu n'as pas suffisamment de droit sur all_objects et tu te retrouves avec moins de 365 lignes dans all_objects

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

Discussions similaires

  1. Ajouter tous les jours d'une année dans une table?
    Par jacko842 dans le forum VB.NET
    Réponses: 4
    Dernier message: 27/04/2010, 16h36
  2. Lister tous les jours d'une année
    Par Delphi-ne dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/02/2007, 18h10
  3. Afficher tous les enregistrements d'une table
    Par bertrand_declerck dans le forum QuickReport
    Réponses: 2
    Dernier message: 08/07/2005, 08h35
  4. afficher tous les champs d'une table
    Par julio84 dans le forum ASP
    Réponses: 8
    Dernier message: 19/01/2005, 10h31
  5. Afficher tous les champs d'une table avec dbexpress et MySQL
    Par LHT dans le forum Bases de données
    Réponses: 2
    Dernier message: 25/06/2004, 17h11

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