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

Linux Discussion :

recuparation resultat sqlplus dans une variable


Sujet :

Linux

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Points : 40
    Points
    40
    Par défaut recuparation resultat sqlplus dans une variable
    Bonjour à tous,

    je suis novice dans le developpement de shell et je rencontre une difficulté.

    j'aimerai recuperer dans une variable le retour d'une commande sqlplus que ce soit le resultat de la requte ou tout simplement l'erreur generé

    acteullement l'erreur généé est envoyé directement dans un fichier

    voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    sqlplus -s toto@toto <<! >> $LOG_FILE 2>&1
    	 whenever sqlerror exit failure;
    	execute PACK_BIDULE.EXPORT_TRUC('$REP_EXTRACT','$nom_fic');
    !
    si jamais cette commande retourne une erreur elle est directement inséré dans le fichier correspondant à la variable $LOG_FILE

    je souhaite maintenant recupérer aussi cette erreur mais dans une varaible pour pouvoir ensuite l'utilisé comme par exmple l'inserer dans une table X

    j'ai tenté çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    logtest=`sqlplus -s toto@toto <<! >> $LOG_FILE 2>&1
    	 whenever sqlerror exit failure;
    	execute PACK_BIDULE.EXPORT_TRUC('$REP_EXTRACT','$nom_fic');
    !`
    mais malheureusemetn rien n'est retourné dans la variable logtest lors de l'affichage

    avez vous des suggestions ou même la réponse à mon problème

    cordialement

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par toitoine01 Voir le message
    Bonjour à tous,

    je suis novice dans le developpement de shell et je rencontre une difficulté.

    j'aimerai recuperer dans une variable le retour d'une commande sqlplus que ce soit le resultat de la requte ou tout simplement l'erreur generé

    acteullement l'erreur généé est envoyé directement dans un fichier

    voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    sqlplus -s toto@toto <<! >> $LOG_FILE 2>&1
    	 whenever sqlerror exit failure;
    	execute PACK_BIDULE.EXPORT_TRUC('$REP_EXTRACT','$nom_fic');
    !
    si jamais cette commande retourne une erreur elle est directement inséré dans le fichier correspondant à la variable $LOG_FILE

    je souhaite maintenant recupérer aussi cette erreur mais dans une varaible pour pouvoir ensuite l'utilisé comme par exmple l'inserer dans une table X

    j'ai tenté çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    logtest=`sqlplus -s toto@toto <<! >> $LOG_FILE 2>&1
    	 whenever sqlerror exit failure;
    	execute PACK_BIDULE.EXPORT_TRUC('$REP_EXTRACT','$nom_fic');
    !`
    mais malheureusemetn rien n'est retourné dans la variable logtest lors de l'affichage

    avez vous des suggestions ou même la réponse à mon problème

    cordialement
    Faut bien comprendre que tout processus Unix possède deux canaux d'affichage distincts
    Le canal standard numéroté "1" ne concerne que les messages normaux du processus
    Le canal d'erreurs numérotés "2" ne concerne que les messages d'anomalies rencontrées lors de l'exécution

    Par défaut ces deux canaux vont sur l'écran mais on peut en dérouter un ou un autre ou les deux vers différents fichiers logs.

    Lorsque tu écris
    Ta variable ne récupère que ce que la commande a fait passer par le canal n° 1 car les concepteurs considèrent que tu ne demandes que le résultat normal.

    Maintenant, tu as fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variable=`commande >log 2>&1`
    Là, ta commande a redirigé le canal 1 (quand on ne met rien c'est le 1 par défaut) vers un fichier "log". Et le canal 2 a été redirigé au même endroit que le 1 (le fichier "log" avec la syntaxe "2>&1"). Donc comme ta commande a tout redirigé vers ce fichier "log" ben t'as plus rien dans ta variable.

    Donc voici différentes syntaxes
    Si tu ne veux que le résultat normal dans ta variable et les erreurs à l'écran
    Si tu ne veux que le résultat normal dans ta variable et les erreurs dans un fichier log
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variable=`commande 2>log`
    Si tu ne veux que les erreurs dans ta variable et le résultat normal à l'écran
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    commande 2>tmp
    variable=`cat tmp`
    Si ne veux que les erreurs dans ta variable et le résultat normal dans un fichier log
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    commande 1>tmp 2>log
    variable=`cat tmp`
    Si tu veux les erreurs et le résultat normal dans ta variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    commande 1>tmp 2>&1
    variable=`cat tmp`
    En espérant que t'aies pigé le truc...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Points : 40
    Points
    40
    Par défaut
    ok merci pour ces précisions j'ai réussi à obtenir ce que je voulais,

    j'envoie les resultats dans un fichier et apres je vais quelque opérations avec un sed que je recupère dans une variable et suite à celà je conactène mon fichier principale de log avec mon temporaire contenant le resultat de la requete

    Merci encore je passe ce post en résolu

  4. #4
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 023
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 023
    Points : 1 785
    Points
    1 785
    Par défaut
    Citation Envoyé par toitoine01 Voir le message
    Bonjour à tous,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    sqlplus -s toto@toto <<! >> $LOG_FILE 2>&1
    	 whenever sqlerror exit failure;
    	execute PACK_BIDULE.EXPORT_TRUC('$REP_EXTRACT','$nom_fic');
    !
    Je ne comprends pas, comment fait il que ton erreur atterisse par magie dans ta variable LOG_FILE comme par magie ?

    A vrai dire, je souhaiterai moi aussi executer une procédure stocké et récupérer le code erreur et ainsi executer une commande différente en fonction du code retourné.

    A la différence près et que je ne suis pas en BASH mais en BATCH :-(

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 290
    Points : 426
    Points
    426
    Par défaut
    Citation Envoyé par weed Voir le message
    Je ne comprends pas, comment fait il que ton erreur atterisse par magie dans ta variable LOG_FILE comme par magie ?
    Elle n'est pas dans la variable LOG_FILE mais dans le fichier pointé par la variable LOG_FILE.

    Citation Envoyé par weed Voir le message
    A la différence près et que je ne suis pas en BASH mais en BATCH :-(
    Bon courage. Je te conseillerais de te tourner vers un autre langage (comme python).

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

Discussions similaires

  1. Stocker un resultat datalist dans une variable VB
    Par karibou57 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 12/11/2010, 16h03
  2. Resultat D'1 Formule Dans Une Variable
    Par damsmut dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/12/2006, 15h07
  3. Resultat d'une requête dans une variable
    Par issam16 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 24/07/2006, 21h26
  4. utiliser le resultat d'un SUM dans une variable
    Par Qapoka dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 16/05/2006, 15h47
  5. Récupérer un résultat oracle dans une variable
    Par claralavraie dans le forum Linux
    Réponses: 4
    Dernier message: 09/01/2006, 16h59

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