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

Oracle Discussion :

résultat de requête sqlplus dans variable shell


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1
    Par défaut résultat de requête sqlplus dans variable shell
    Bonjour,

    je souhaiterais récupérer le résultat d'une requête sqlplus dans une variable shell.

    Voici ce que je tape :

    test=`sqlplus -S "login/mdp" <<END
    > set head off
    > set feedback off
    > set newpage none
    > ALTER SESSION SET NLS_DATE_FORMAT = 'hh24:mi:ss dd.mm.yyyy';
    > select "\$CHAMP1",CHAMP2 FROM SCHEME.TABLE WHERE "\$CHAMP1" = hextoraw('48429F50FF7FC6');
    > END`

    il est à noter que $CHAMP1 n'est pas une variable shell mais bel et bien le nom du champs recherché (et je ne peux rien y changer )


    Par défaut je suis en sh et voici le résultat que j'obtiens:
    sh[7]: COID: Parameter not set.

    Quand je passe en ksh j'obtiens:
    echo $test
    ERROR: ORA-01741: illegal zero-length identifier

    Dans la mesure du possible j'aimerais rester en sh. Pouvez-vous m'aider à faire marcher cette commande ?

    Merci d'avance pour votre aide, je commence à m'arracher les cheveux !

    A+

    LKX

  2. #2
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Est-ce qu'il faudrait pas proteger aussi les guillemets ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 137
    Par défaut Une façon pour recuperer ta variable
    Bonsoir,


    Tout d’abords

    Créer le script sql (sous unix) dont le nom par exemple est get_resultat_requete.sql voici son contenu :
    set head off
    set feed off
    spool get_resultat_requete.sql
    SELECT variable1 --- (La variable que vous voulez recuperez)
    FROM NOM_TABLE
    WHERE colonne= ();
    spool off
    exit


    Dans Le shell principal :

    Créer une function au debut du shell principal :


    Nom_Fonction ()
    {
    sqlplus -s $USERNAME/$PASSWORD@$INSTANCE <<EOF
    @get_resultat_requete.sql
    EOF
    head – N get_resultat_requete.sql | tail -1 | read variable1


    --- ( N est le Nombre de lignes)

    }


    ----- au milieu de shell principal appellez la function Nom_Fonction automatiquement la variable variable1 sera initialisée


    Bon Courage

  4. #4
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 78
    Par défaut
    Merci Mehdilis pour cette technique, cependant j'ai un souci, ci-dessous 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
    16
    17
    18
    Exec_Req_SQL()
    {
    sqlplus log/mdp@instance < requete.sql
    head -3 get_resultat_requete.sql | tail -1 | sed 's/ //g' | read resultat
    }
    #...
    # (construction de la requete: $requete)
    #...
     
    echo "set head off" > requete.sql
    echo "set feed off" >> requete.sql
    echo "spool get_resultat_requete.sql" >> requete.sql
    echo "$requete;" >> requete.sql
    echo "spool off" >> requete.sql
    echo "exit"  >> requete.sql
     
    # Appel de ma fonction:
    Exec_Req_SQL()
    le fichier requete.sql est généré et ressemble à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set head off
    set feed off
    spool get_resultat_requete.sql
    select count(*) from ma_table WHERE CHAMP1='20070614' OR CHAMP1='20070615' ;
    spool off
    exit
    Le fichier get_resultat_requete.sql n'est pas créé lorsque je lance le script, du coup, je ne récupère pas mon résultat.

    à la main par contre, si je lance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sqlplus log/mdp@instance < requete.sql
    head -3 get_resultat_requete.sql | tail -1 | sed 's/ //g' | read resultat
    ça marche nickel, le fichier get_resultat_requete.sql est bien créé et j'ai mon résultat

    de façon générale, si je fais un écho ou autre dans la fonction, il n'apparait pas dans mon terminal, mais je ne sais pas s'il apparait quelque part (dans les mails de mon utilisateur?) du coup je me posais la question: est-ce que lors de l'exécution de la fonction, il génère le fichier get_resultat.sql ailleurs, mais je n'en trouve pas sur ma machine...

    je ne comprend pas, si quelqu'un peut m'aider, merci

  5. #5
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 78
    Par défaut
    finalement, j'ai sorti le contenu de ma fonction et je l'ai mis bêtement dans le script, ça marche nickel

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/04/2008, 17h40
  2. Encapsulation de requêtes SQL dans un shell
    Par xfree dans le forum Langage SQL
    Réponses: 1
    Dernier message: 23/10/2007, 09h56
  3. Réponses: 7
    Dernier message: 31/08/2006, 18h03
  4. Réponses: 6
    Dernier message: 08/06/2006, 10h07

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