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 :

Période de date SQL dans un scriptshell


Sujet :

Sql*Plus Oracle

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Août 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut Période de date SQL dans un scriptshell
    Bonjour les experts,

    Je souhaite via un scriptshell extraire tous les données d'une table sur une période annelle à compter du jour de son exécution. Sachant que je suis sur Oracle 11g ma requête ci-dessous fonctionne bien sauf que on l'a mettant dans un scriptshell elle me retourne une erreur au niveau de la soustraction !!!

    Pourriez-vous m'apporter vos lumières svp.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from MaTable DATE_TRM>(sysdate-356);
    Erreur de sortie :

    ERROR at line 1:
    ORA-01843: not a valid month

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour,

    on n'est pas experts, mais on sait utiliser un forum. Les question sql vont dans le sous-forum sql.

    Pourquoi poser la question dans le forum GNU Linux. As-tu des soucis pour écrire ton script (indépendamment du sql) ?

    Si oui, quel est l'interpréteur ? Quel est le message d'erreur ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Août 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut
    Effectivement mon souci n'est pas SQL comme cité dans mon précédent message mais le problème est Redhat qui n’interprète pas comme il parait la requête SQL dans le scriptshell !!! Si vous êtes modérateur vous pouvez transférer mon message au forum adéquat si un problème de scripting devrait être poser dans un forum de BDD. Merci

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 551
    Points : 19 385
    Points
    19 385
    Par défaut
    Bonjour,

    il nous faut un peu plus de contexte :
    - OS sur lequel a été rédigé le script
    - commande complète tapée dans la console
    - shell utilisateur par défaut
    - shell utilisé dans le script
    - contenu du script
    - sortie du script en ayant ajouté set -x avant la commande
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Débutant
    Profil pro
    Inscrit en
    Août 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut
    Mon code :
    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
     
    sqlplus USER/PASSWORD  << EOF
    spool $1/MonFichierDeSortie\.csv
    set echo off
    set ver off
    set heading on
    set pages 10000
    set linesize 10000
    set null null
    set trimspool on
    set colsep '|'
    select * from MaTable DATE_TRM>(sysdate-356);
    spool off;
    exit;
    EOF
    - OS sur lequel a été rédigé le script
    redhat 2.6.18-308.el5

    - commande complète tapée dans la console
    ./MonShell.sh CheminAbsolut

    - shell utilisateur par défaut
    Shell

    - sortie du script
    ERROR at line 12:
    ORA-01843: not a valid month

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Psuchoo Voir le message
    Effectivement mon souci n'est pas SQL comme cité dans mon précédent message mais le problème est Redhat qui n’interprète pas comme il parait la requête SQL dans le scriptshell !!! Si vous êtes modérateur vous pouvez transférer mon message au forum adéquat si un problème de scripting devrait être poser dans un forum de BDD. Merci
    Je dirais que le problème vient de la requête SQL. Voici une commande sql semblable à la tienne, il y a juste une partie en plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM commande
    WHERE datecom < ADD_MONTHS(sysdate, -3) ;
    De plus, ce sera plus pratique de mettre tes commandes sql dans un fichier et de l'appeler comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sqlplus USER/PASSWORD  << EOF
    @mon_script.sql
    EOF

  7. #7
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Pour savoir, tu es sur que ta colonne datecom est une date ?
    Car si c'est pas le cas, peut etre qu'oracle essaye de faire une transformation implicite d'une colonne en char vers un format date et n'y arrive pas, bin peut etre parce que le mois n'est pas valide, au sens où l'ecriture classic d'une date en sql c'est " DATE 'YYYY-MM-DD' "

  8. #8
    Débutant
    Profil pro
    Inscrit en
    Août 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut Problème initial résolu, on passe à un problème de sortie
    Merci ecatomb ta réponse que j'adopte sans critique.

    ADD_MONTHS(sysdate, -3)
    Maintenant après que ma requête marche dans mon script je constate que mon fichier de sortie contient la requête entête puis les informations tracées comme suit sachant que moi je ne souhaite pas afficher la requête dans le contenu du fichier :

    SQL> select * from MaTable where DATE_TRM>ADD_MONTHS(sysdate, -12);

    ID_BOBJECT|TRN_ID|CD_RE
    --------------|---------|--------
    178041| 253|BDI01

    J'ai essayé de mettre en off quelques variables sur les quelles j'avais des doutes mais ça n'a pas abouti
    Quelqu'un s'aura quelle variable exactement faut forcer pour éliminer cette ligne précisément?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    set echo off
    set ver off
    set heading on
    set pages 10000
    set linesize 10000
    set null null
    set trimspool on
    set colsep '|'
    spool MonFichierDeSortie\.csv
    select * from MaTable DATE_TRM>ADD_MONTHS(sysdate, -12);
    spool off;

  9. #9
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    A tester :

    moi, quand j'extrais mes données, j'ai que le resultat, j'ai meme pas les colonnes names


    et j'ai les paramètres suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SET TRIMSPOOL ON
    SET FEEDBACK OFF
    SET TERMOUT OFF
    SET ECHO OFF

  10. #10
    Débutant
    Profil pro
    Inscrit en
    Août 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut Problème initial résolu, on passe à un problème de sortie
    moi, quand j'extrais mes données, j'ai que le résultat, j'ai même pas les colonnes names

    Tu 'as par défaut sur ton environnement

    Dans mon cas il me sort même les erreurs captées lors du spool. Ça commence à m’agacer lol

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Pour générer un fichier csv depuis sqlplus :
    http://www.developpez.net/forums/d13...s/#post7109985

  12. #12
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    je constate que mon fichier de sortie
    Fichier de sortie ? Quel fichier de sortie ? Pour l'instant, tout ce qu'on a vu, c'est une commande qui affiche un résultat à l'écran. Or, ces exécutables SQL ont la particularité de faire un affichage mis en forme dans la console (bords de tableau, entêtes) et un résultat différent dans un fichier (format csv classique qui permet un retraitement élégant avec "awk").

    Faut-il rediriger dans un fichier ou activer une option de "sqlplus" ? A toi de trouver.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  13. #13
    Débutant
    Profil pro
    Inscrit en
    Août 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut
    Si on remonte un peu plus haut on trouve parmi les ligne de mon code !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    spool MonFichierDeSortie\.csv
    Citation Envoyé par Flodelarab Voir le message
    Fichier de sortie ? Quel fichier de sortie ? Pour l'instant, tout ce qu'on a vu, c'est une commande qui affiche un résultat à l'écran. Or, ces exécutables SQL ont la particularité de faire un affichage mis en forme dans la console (bords de tableau, entêtes) et un résultat différent dans un fichier (format csv classique qui permet un retraitement élégant avec "awk").

    Faut-il rediriger dans un fichier ou activer une option de "sqlplus" ? A toi de trouver.

  14. #14
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    D'un point de vue purement SQL, il y a fort peu de chances que la requête suivante donne un quelconque résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from MaTable DATE_TRM>ADD_MONTHS(sysdate, -12);
    Il manquerait peut-être un WHERE quelque part...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  15. #15
    Débutant
    Profil pro
    Inscrit en
    Août 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut
    J'ai déjà le résultat, le problème réside dans la manière dont il est affiché le résultat justement. Je souhaite désactivé tous les plots et ne garder que la table et les données dedans.
    Ci-dessous le contenu de mon fichier mais je ne veux garder que la table comme sortie sans la première ligne (Prompt+requête).

    SQL> select * from MaTable where DATE_TRM>ADD_MONTHS(sysdate, -12);

    ID_BOBJECT|TRN_ID|CD_RE
    --------------|---------|--------
    000178041 | 00253 |BDI01

  16. #16
    Débutant
    Profil pro
    Inscrit en
    Août 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut Résolu avec doute (echo off ne fonctionne pas en mode interactif)
    Pour pouvoir bien maîtriser les variable de formatage SQL*plus il faut créer un fichier sql indépendant et l’exécuter avec le batch crée.

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

Discussions similaires

  1. Date valide dans une requete SQL
    Par Seth77 dans le forum Général Dotnet
    Réponses: 17
    Dernier message: 13/06/2007, 13h36
  2. Réponses: 4
    Dernier message: 02/05/2007, 10h22
  3. date anniversaire dans 15 jours en SQL
    Par fa310428 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 19/02/2007, 19h03
  4. Réponses: 3
    Dernier message: 11/01/2007, 15h44
  5. Réponses: 2
    Dernier message: 30/05/2006, 14h58

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