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*Plus Oracle Discussion :

Débutant : Problème de conditions sur un script ?


Sujet :

Sql*Plus Oracle

  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2016
    Messages : 9
    Par défaut Débutant : Problème de conditions sur un script ?
    Bonjour tout le monde,

    j'exécute un script .bat qui apelle un script.sql qui comprend une requête dont le résultat est exporté en csv. La requête utilise une variable de date comme filtre dans un "where". La variable change en fonction du jour de l'exécution du script. Le lundi, la variable doit contenir la date du vendredi et pour les autres jours de la semaine (excepté le week-end), la variable doit contenir le jour de la veille.

    Le corps du script semble fonctionner bien que je ne sois pas certain de la déclaration des variables, mais les conditions ne semblent pas être prises en compte, voici l'idée du script.sql :
    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
     
    -- jour de la semaine
    Variable jour number ;
    Exec select (1 + TRUNC (SYSDATE) - TRUNC (SYSDATE, 'IW')) into :jour from dual;
    -- déclaration de la variable pour la date
    variable madate varchar2(10)
     
    begin
    --si premier jour de la semaine
    if jour = 1 then
    -- définition de la variable pour la date du vendredi
    exec select to_char (sysdate – interval ‘3’ day, 'DD/MM/YYYY') into :madate from dual;
     
    --sinon
    else
    -- définition de la variable pour la date de la veille
    exec select to_char (sysdate – interval ‘1’ day, 'DD/MM/YYYY') into :madate from dual;
     
    endif;
     
     
    -- Exportation csv
    set pagesize 0
    spool export.csv
    select code||','||trunc (dat_crea)... from table where cod_cli = '770' and trunc (dat_crea) between to_date (:madate,'DD/MM/YYYY') and to_date (:madate, 'DD/MM/YYYY') group by code, trunc (dat_crea);
    spool off
    exit;
     
    end;
    J'ai passé beaucoup de temps avec ces conditions en reprenant des scripts simples trouvés sur internet et en les exécutant dans sqlplus, pourtant aucune valeur n'était renvoyée au point que je me demande si les conditions sont possibles en sqlplus (d'un côté j'ai lu quelque part que non mais j'ai trouvé des scripts avec conditions) ?
    Auriez-vous des conseils ?

  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
    Je ferais comme ça (avec new_value de sqlplus) et le test dans un case sql :

    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
    SQL> column jour new_value madate
    SQL> select case when upper(to_char(sysdate, 'fmDay', 'nls_date_language=French')) = 'LUNDI'
                then to_char(sysdate-3,'dd/mm/yyyy')
                else to_char(sysdate-1,'dd/mm/yyyy')
            end as jour
      from dual;  2    3    4    5
     
    JOUR
    ----------
    30/08/2016
     
    SQL> select to_date ('&madate','DD/MM/YYYY') from dual;
    ancien   1 : select to_date ('&madate','DD/MM/YYYY') from dual
    nouveau   1 : select to_date ('30/08/2016','DD/MM/YYYY') from dual
     
    TO_DATE(
    --------
    30/08/16
     
    SQL>
    Et utiliser le to_date ('&madate','DD/MM/YYYY') dans la requête qui est spool.

    Un peu de paramétrage sqlplus sera nécessaire pour éviter de spool la substitution de la variable &madate et formater correctement le fichier csv.

  3. #3
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2016
    Messages : 9
    Par défaut
    Merci infiniment pour ta réponse skuatamad !!!

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

Discussions similaires

  1. [débutant] problème d'image sur une form
    Par Anthony17 dans le forum Delphi
    Réponses: 3
    Dernier message: 21/11/2006, 14h49
  2. problème de condition sur un entier
    Par Stouille89 dans le forum C
    Réponses: 18
    Dernier message: 19/11/2006, 11h51
  3. [XSLT] Problème de condition sur un XSLT
    Par alex.nd dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 12/09/2006, 15h16
  4. [débutant] problème de condition dans une requete
    Par banker dans le forum Access
    Réponses: 5
    Dernier message: 22/03/2006, 13h52
  5. Réponses: 7
    Dernier message: 27/02/2006, 18h04

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