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 :

All_objects et dates


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 37
    Points : 37
    Points
    37
    Par défaut All_objects et dates
    Bonjour,

    la requête ci-dessous affiche les dates du 01/01/2012 à la date du jour courante.
    Mais ce que je ne comprends pas c'est le lien entre all_objects, ROWNUM

    Quelqu'un pourrait-il éclairer ma lanterne ?
    Merci d'avance
    Gilles


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                         SELECT d.start_date - 1 + ROWNUM AS d                         
                               FROM all_objects,
                                   (SELECT MIN (TRUNC (modified, 'MM')) AS start_date                       
                                    FROM TEST) d                       
                               WHERE d.start_date - 1 + ROWNUM <= SYSDATE

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Il s'agit d'une méthode pour générer des lignes.

    all_objects étant le catalogue, il y a toujours un petit paquet d'information dedans, même si votre base est toute neuve.
    rownum renvoie un numéro de ligne avec une requête, sans ordre particulier si aucun order by n'est spécifié.

    Si vous faites simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select rownum from all_objects;
    Vous vous retrouvez avec un compteur de 1 à n (n étant le nombre de lignes contenu dans all_objects).
    En l'ajoutant à une date fixe, vous générez ainsi un calendrier quotidien.

    Je vous conseille plutôt de mettre en place une fois pour toute un calendrier fait main dans votre base, c'est très utile et ça ne prend rien comme place :
    http://www.developpez.net/forums/d11...-jours-feries/

    Sinon pour générer des lignes, il y a cette astuce, officiellement non supportée mais qui marche très bien, et qui est très rapide (même pour générer des millions de lignes) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        select date '2012-01-01' + level - 1 as dt
          from dual
    connect by level <= trunc(sysdate) - date '2012-01-01' + 1;
    Si vous êtes au moins en 11gR2, vous pouvez faire la même chose avec une CTE récursive, là on utilise du SQL normatif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    with cte_calendar (dt) as
    (
    select date '2012-01-01'
      from dual
     union all
    select dt + 1
      from cte_calendar
     where dt < current_date - 1
    )
    select dt
      from cte_calendar;

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 23/07/2002, 14h33
  2. soustraire deux dates ?
    Par joejoe dans le forum SQL
    Réponses: 2
    Dernier message: 19/07/2002, 15h53
  3. Generation d'evenements a une date precise
    Par pascalzzz dans le forum MFC
    Réponses: 2
    Dernier message: 04/06/2002, 15h21
  4. Réponses: 3
    Dernier message: 06/05/2002, 18h24
  5. Réponses: 3
    Dernier message: 19/04/2002, 00h11

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