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 :

Novice : Afficher toutes les dates entre 2 dates en paramètre


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti Avatar de PAYASS59
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2005
    Messages : 755
    Points : 324
    Points
    324
    Par défaut Novice : Afficher toutes les dates entre 2 dates en paramètre
    Bonjour,

    j'essaie d'apprendre tout seul le pl/sql pour résoudre une problématique.

    Je débute mon programme à la base que je viendrais élargir au fur et à mesure.

    voilà ce que j'ai fait de tout bête pour le moment.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SET SERVEROUTPUT ON
    DECLARE
          CURSOR C_DATE IS
          SELECT sysdate from DUAL;
    BEGIN
        --boucle sur la récup des dates--
        FOR C in C_DATE LOOP
             DBMS_OUTPUT.PUT_LINE('date :' ||C.sysdate);
        END LOOP;
    END;
    Je voudrais passer en paramètres 3 variables :

    VAR_DATEJOUR = la date du jour
    VAR_DATE_AVANT = c'est la date du jour - 5 jours
    CAR_DATE _APRES = c'est la date du jour + 30 jours


    Je voudrais que la sortie m'affiche toutes les dates entre aujourd'hui moins 5 jours et aujoud'hui + 30 jours.

    Comment peut-on arriver à faire cela ?

    Merci pour votre aide.
    Je préfère ma soif d'apprendre, à leurs certitudes de savoir....

  2. #2
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Plusieurs remarques :
    - ici tu n'as pas besoin d'un curseur, en effet le curseur est nécessaire lorsqu'il faut faire des traitements ligne à ligne --> ici tu n'as qu'une seule valeur qui est retournée
    - tu veux afficher des dates qui sont dans une table entre J-5 et J+5 ?
    --> si oui tu n'as pas besoin de PL/SQL
    --> si non peux-tu m’expliquer plus précisément ce que tu veux parce que j'ai pas compris
    ~ Lola ~

  3. #3
    Membre averti Avatar de PAYASS59
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2005
    Messages : 755
    Points : 324
    Points
    324
    Par défaut
    Merci pour la réponse en fait j'ai besoin de ces dates en variables car après elle seront passées en paramètres dans une requête:

    J'arrive à récupérer les date de la manière suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SET SERVEROUTPUT ON
    DECLARE
          CURSOR C_DATE IS
          SELECT sysdate-5 + (rownum - 1) as JOURID
          FROM dual
          connect BY sysdate-5 + (rownum - 1) <= sysdate+31;
    BEGIN
        --boucle sur la récup des dates--
        FOR C in C_DATE LOOP
             DBMS_OUTPUT.PUT_LINE('date :' ||C.JOURID);
        END LOOP;
    END;

    Maintenant ce que je cherche à faire c'est de passer toutes ces dates dans une requête qui va s'exécuter autant de fois que j'ai de date.

    Requete = SELECT CA FROM CA WHERE date_ca="mes_dates_recuperees";

    Et je veux en sortie afficher ligne par ligne la date et le CA.
    Je préfère ma soif d'apprendre, à leurs certitudes de savoir....

  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
    Et dans ta table CA tu n'as pas une date ?

    Il serait plus simple de faire ta sélection directement à partir des données de la table CA plutôt qu'à l'aide d'un calendrier virtuel

    Autrement dit en SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Date_CA, CA
    FROM CA
    WHERE Date_CA BETWEEN pe_date_debut AND pe_date_fin
    ORDER BY Date_CA;
    où pe_date[..] sont tes paramètres entrants

  5. #5
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Il faut déclarer des variables puis utiliser le select de cette manière :

    En gros l'idée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    OPEN C_DATE;
       LOOP
        FETCH C_DATE INTO var_date;
         EXIT WHEN C_DATE%NOTFOUND;
     
           SELECT CA INTO var_ca
           FROM CA
           WHERE date_ca= var_date;
     
           dbms_output.putline(...);
     
       END LOOP;
    Mais ne serait-il pas plus simple de faire un simple select du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM MaTable
    WHERE MaDate BETWEEN sysdate - 5 AND sysdate + 5
    ~ Lola ~

  6. #6
    Membre averti Avatar de PAYASS59
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2005
    Messages : 755
    Points : 324
    Points
    324
    Par défaut
    c'est juste un exemple le CA, je dois executer ma requête autant de fois que j'ai une date...

    C'est juste ce que je cherche à faire
    Je préfère ma soif d'apprendre, à leurs certitudes de savoir....

  7. #7
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Nous avons bien compris, mais en quoi la solution que nous te proposons Scriuiw et moi est fausse ?

    Car au final pour chaque date comprise dans l'intervalle tu auras ton CA (ou autre).
    ~ Lola ~

  8. #8
    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
    c'est juste un exemple le CA, je dois executer ma requête autant de fois que j'ai une date...
    Dans ce cas quel est l'intérêt d'exécuter n fois une requête pour avoir un résultat à chaque fois quand une seule requête peut te ramener tous les résultats ?

    C'est contre performant

  9. #9
    Membre averti Avatar de PAYASS59
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2005
    Messages : 755
    Points : 324
    Points
    324
    Par défaut
    le CA est juste un exemple si j'avais la possibilité de faire autrement, je partirai pas sur du pl sql
    Je préfère ma soif d'apprendre, à leurs certitudes de savoir....

  10. #10
    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
    La solution de Lola06 est donc adaptée à ta problématique

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

Discussions similaires

  1. Sélectionner toutes les dates entre deux dates
    Par corgato dans le forum Langage
    Réponses: 2
    Dernier message: 09/11/2008, 20h50
  2. afficher toutes les dates au format francais
    Par msteinbe dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 23/12/2007, 22h19
  3. [Graphique] afficher toutes les dates en abscisse
    Par Karoutcho! dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/10/2007, 13h14
  4. Afficher les dates entre 2 dates
    Par lido dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/10/2007, 13h13
  5. [VB6]sortir toutes les dates entre deux dates
    Par AlfiQue dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/02/2006, 19h09

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