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

Shell et commandes GNU Discussion :

Problème de variable lors de l'appel d'un fichier sql


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Par défaut Problème de variable lors de l'appel d'un fichier sql
    Bonjour à tous,

    Voilà un petit problème à vous soumettre :

    J'ai un fichier sql, contenant une requête qui devra être appelée par plusieurs shells.

    Cette requête contient des variables.

    Ex: select * from table where champ = $var

    Dans les shells, je dois "envoyer" cette requête dans un pipe, puis l'exécuter.

    Le problème est que je n'arrive pas à remplacer les variables par leur valeur, déclarée dans le shell avant d'envoyer la requête dans le pipe.

    J'espère que vous pourrez m'aider

    Merci d'avance,

    Nicolas

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    probablement en faisant un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "commande sql "$valeur" where ..... "$variable" ; " | interpreteurSQL
    exemple :

    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
    $ unset toto ; unset titi
    $ toto=20
    $ titi=gazoil
    $ echo "select * from "$titi" where ref >= "$toto" ; " | mysql -u francois -p perso -h undertaker
    Enter password: 
    ref     date            prix    km
    20      2011-07-03      39.83   564
    21      2011-08-01      56.26   716
    22      2011-08-27      54.85   722
    23      2011-09-17      46.7    581
    24      2011-10-09      55.4    708
    25      2011-11-01      58.47   718
    26      2011-11-29      57.74   691
    $ 
    $ 
    $ unset toto ; unset titi

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Par défaut
    Ça c'est exactement ce que je faisais avant. Mais là, j'essaie de séparer la requête et le Shell.

    Fichier.sql
    Fichier.sh

    Comment :
    1. Déclarer les variables
    2. Appeller le fichier sql pour que les variables dans la requête soient bien remplacées par leur valeur.

    J'espère que c'est plus clair

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Par défaut
    En gros :

    fichier.sql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select ch1, ch2, ch3 from $table where champ1 = $champ
    fichier.sh

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    table=personnes
    champ=Paul
     
    . fichier.sql | mysql  -u francois -p perso -h undertaker

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Bonjour,

    Le contenu des fichiers lus n'est pas sujet au développement des variables. Désolé.

    une solution : utiliser un fichier patron, le modifier avec sed, avec les variables ad'hoc, vers un fichier temporaire, et utiliser ce fichier temporaire, ou utiliser la sortie de sed
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Par défaut
    Arf! Il me semblait bien que ce n'était pas si simple...

    Pour vous donner une idée du contexte, j'ai plusieurs shells différents qui doivent tourner sur des DB différentes mais de même structure, mais qui doivent exécuter la même requête à un moment ou l'autre, avec des variables différentes. Les shells sont sujets à modification, la requête aussi, mais je n'ai pas envie de devoir éditer une dizaine de shells à chaque fois que la requête change...L'idée d'avoir un fichier sql séparé, c'est surtout pour pouvoir éditer la requête dans un éditeur adhoc avec un highlight correct de la syntaxe.

    Et si je fais quelque chose comme ceci, puisque si je ne me trompe, si on appelle un shell et non un fichier txt ou sql, les variables passent...

    fichier01.sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     select ch1, ch2, ch3 from $table where champ1 = $champ
    fichierquer.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    QUER()
    {
    echo "echo""
    . fichier$sql.sql
    echo """
    }
    monshell.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    export sql=01
    export table=personnes
    export champ=Paul
    . fichierquer.sh 
    QUER | mysql  -u francois -p perso -h undertaker
    Une autre idée serait de commenter le la partie echo " dans le fichier sql, puis de renommer le fichier sql en sh et retirer les caractères de commentaire, inclure le fichier sh puis le buter. Faisable?

    Merci d'avance,

    -N

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    tu ne peux pas sourcer un fichier de commandes sql dans un interpréteur de commandes : il ne va pas comprendre le contenu du fichier tel qu'il le devrait être.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Réponses: 7
    Dernier message: 05/06/2008, 14h37
  2. Réponses: 4
    Dernier message: 06/04/2008, 11h54
  3. Problème de linking lors de l'appel d'un .cpp
    Par beegees dans le forum C++
    Réponses: 4
    Dernier message: 31/03/2008, 20h05
  4. Utilisation de variables lors d'un appel
    Par Bibipulse dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/02/2008, 14h01
  5. Problème de variable lors d'1 appel de fonction PHP
    Par kriekbellevue dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 14/02/2006, 17h49

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