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 :

Boucle sur une date


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 80
    Par défaut Boucle sur une date
    Bonjour le forum,

    Je souhaiterai exécuter ma procédure plusieurs fois avec comme paramètre un date ==> faire une boucle mais je connais pas la syntaxe.

    voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create or replace
    PROCEDURE "TEST" (date_fin IN   DATE) AS
     
    BEGIN
    FOR date_fin IN ('31/01/2008','26/02/2008');
    LOOP;
    insert into TEST (date_fin, champs1,champs2) SELECT(date_fin....);
    end loop;
    commit;
    end;
    mais ca ne fonctionne pas

    Avez vous une idée ?

    Merci

  2. #2
    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
    Par défaut
    Je ne comprends pas ce que tu veux faire et ton code est bourré de fautes

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Tu veux insérer toutes les dates entre datedeb et datefin ?

    Si c'est ça, tu passes par une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FOR i in 0 .. x LOOP  END LOOP
    Avec x = différence des dates (datefin-datedeb) + 1)
    Pour avoir la date dans la boucle, c'est datedeb + i

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 80
    Par défaut
    Je souhaite juste exécuter ma procédure plusieurs fois avec comme paramètre un date

    ex il exécute la procédure avec la variable date_fin = '31/01/2008' et puis '29/02/2008', '31/03/2008',... etc et ce de manière automatique.

    le code était juste comme exemple.

    Merci

  5. #5
    Expert confirmé
    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
    Par défaut
    Les boucle Loop - End loop ne peuvent être indicées que par un entier.

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Si j'ai bien compris tu veux faire une procédure qui lance une autre procédure plusieurs fois avec des date qui changent automatiquement.
    C'est quoi ce changement : Tous les derniers jours de chaque mois (Fonction LAST_DAY) ?

    Explique plus clairement ton cas.

  7. #7
    Expert confirmé
    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
    Par défaut
    Son exemple est clair, il veut utiliser une structure de type IN('','') en lieu et place de For ... Loop. En gros, c'est un problème de SQL dynamique.

  8. #8
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Ben pas vraiment, il dit pas que c'est une liste de date en paramètre.
    Bref, c'est pas clair pour moi.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 80
    Par défaut
    Merci SheikYerbouti
    C'est exactement ca?
    Tu as la solution ?

    Merci

  10. #10
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Mais c'est quoi ce paramètre ?
    Un VARCHAR ?
    15 paramètres DATES ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 80
    Par défaut
    C'est UN paramètre Date bien sur

  12. #12
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Et comment tu passes de 1 paramètre DATE à plusieurs dates ?

  13. #13
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut,
    quelle est ta version ?


    Essaies le code ci-dessous :

    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
    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
    115
    116
    117
    118
     
    SQL> edit
    Wrote file afiedt.buf
     
      1   create or replace procedure  traitement( date1 varchar2,date2 varchar2)
      2   as
      3   begin
      4   for rec_date  in (
      5   SELECT TO_DATE (date1, 'DD/MM/YYYY') +num  date_fin
      6   FROM
      7   (SELECT LEVEL -1 num
      8   FROM (SELECT 1
      9   FROM DUAL)
     10   CONNECT BY LEVEL <= TO_DATE (date2, 'DD/MM/YYYY') - TO_DATE (date1, 'DD/MM/YYYY')+1))
     11   loop
     12   dbms_output.put_line(rec_date.date_fin);
    -- tu rajoutes l'appel à ta procédure 
    -- TEST(rec_date.date_fin);
     13   end loop;
     14*  end ;
    SQL> /
     
    Procedure created.
     
    SQL> exec  traitement('01/01/2008','31/03/2008');
    01-JAN-08
    02-JAN-08
    03-JAN-08
    04-JAN-08
    05-JAN-08
    06-JAN-08
    07-JAN-08
    08-JAN-08
    09-JAN-08
    10-JAN-08
    11-JAN-08
    12-JAN-08
    13-JAN-08
    14-JAN-08
    15-JAN-08
    16-JAN-08
    17-JAN-08
    18-JAN-08
    19-JAN-08
    20-JAN-08
    21-JAN-08
    22-JAN-08
    23-JAN-08
    24-JAN-08
    25-JAN-08
    26-JAN-08
    27-JAN-08
    28-JAN-08
    29-JAN-08
    30-JAN-08
    31-JAN-08
    01-FEB-08
    02-FEB-08
    03-FEB-08
    04-FEB-08
    05-FEB-08
    06-FEB-08
    07-FEB-08
    08-FEB-08
    09-FEB-08
    10-FEB-08
    11-FEB-08
    12-FEB-08
    13-FEB-08
    14-FEB-08
    15-FEB-08
    16-FEB-08
    17-FEB-08
    18-FEB-08
    19-FEB-08
    20-FEB-08
    21-FEB-08
    22-FEB-08
    23-FEB-08
    24-FEB-08
    25-FEB-08
    26-FEB-08
    27-FEB-08
    28-FEB-08
    29-FEB-08
    01-MAR-08
    02-MAR-08
    03-MAR-08
    04-MAR-08
    05-MAR-08
    06-MAR-08
    07-MAR-08
    08-MAR-08
    09-MAR-08
    10-MAR-08
    11-MAR-08
    12-MAR-08
    13-MAR-08
    14-MAR-08
    15-MAR-08
    16-MAR-08
    17-MAR-08
    18-MAR-08
    19-MAR-08
    20-MAR-08
    21-MAR-08
    22-MAR-08
    23-MAR-08
    24-MAR-08
    25-MAR-08
    26-MAR-08
    27-MAR-08
    28-MAR-08
    29-MAR-08
    30-MAR-08
    31-MAR-08
     
    PL/SQL procedure successfully completed.

  14. #14
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Houla !! Un peu trop compliquée cette requete !
    Il y a plus simple
    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
    DECLARE
    	v_date1 DATE := TO_DATE('27/02/2008','DD/MM/RRRR');
        v_date2 DATE := TO_DATE('04/03/2008','DD/MM/RRRR');    
    BEGIN
    	FOR i IN 0 .. (v_date2 - v_date1)
        LOOP
        	DBMS_OUTPUT.PUT_LINE(i ||':'|| (v_date1 + i));
        END LOOP;
    END;
     
    0:27-FEB-08
    1:28-FEB-08
    2:29-FEB-08
    3:01-MAR-08
    4:02-MAR-08
    5:03-MAR-08
    6:04-MAR-08

  15. #15
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Citation Envoyé par McM Voir le message
    Houla !! Un peu trop compliquée cette requete !
    Il y a plus simple
    C'est vrai, tu as raison.

Discussions similaires

  1. Boucle sur une date
    Par kabamel dans le forum Access
    Réponses: 2
    Dernier message: 27/02/2015, 13h13
  2. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  3. Une boucle sur des dates
    Par Nowwis dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 29/08/2009, 11h51
  4. Problème lors d'un Update sur une date
    Par Nany dans le forum ASP
    Réponses: 3
    Dernier message: 19/05/2004, 22h37
  5. [SQL] Conditions sur une date dans une requete
    Par poufouille dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/03/2004, 14h25

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