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 :

Récupération résultat requête SQL en bash avec des espaces dans les champs


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Récupération résultat requête SQL en bash avec des espaces dans les champs
    Bonjour,

    Je vous contacte car j'ai un programme qui requête une base de données avec Sqlplus, le résultat étant mis dans une variable bash.
    Le probleme est que je ne sais pas récupérer le contenu de chaque champs dès lors qu'il y'a un espace dans un ou plusieurs des champs.
    Pourriez-vous m'aider ?
    Exemple :

    Champs1 Champs2 Champs3

    toto tata tete tutu

    Comment faire comprendre au système que "tata tete" doit être mis dans une variable ?
    Sans espace j'aurai fait un "awk" mais là ... je sèche.
    Merci !

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 846
    Points : 6 530
    Points
    6 530
    Par défaut
    Quelle certitude as-tu que l'espace appartienne obligatoirement au deuxième champ? Est-ce que les champs 1 et 3 ne peuvent pas en contenir?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    En fait le deuxième champs contient une adresse postale qui peut être du type : "1 rue des XXX" et il me faut récupérer cette adresse entière et non la découper.
    Et les champs 1 et 3 ne contiendront pas d'espace car l'un correspond au code postal et l'autre à un numéro de département donc pas d'espace.
    Merci pour ton aide !

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 846
    Points : 6 530
    Points
    6 530
    Par défaut
    Si tu n'as que trois champs tu peux changer le délimiteur de champs avec sed: sed 's/ \(.*\) /#\1#/' <(echo 'toto tata tete tutu').
    Après tu peux changer la valeur d'IFS pour en faire un tableau.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Points : 539
    Points
    539
    Par défaut
    Bonjour,
    On peut utiliser le Remplacement des paramètres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var='toto tata tete tutu'
    varfin=${var##* }
    varinter=${var#* }
    varcentre=${varinter%$varfin}
    echo $varcentre
    Cordialement.

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Malheureusement, je n'ai pas 3 champs mais 8. avec 2 champs qui sont susceptibles d'avoir des espaces.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Points : 539
    Points
    539
    Par défaut
    Ok,
    Ma boule de cristal est en panne.
    S'il n'y a pas de critère pour différencier les champs ...
    Bonne chance.

  8. #8
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 846
    Points : 6 530
    Points
    6 530
    Par défaut
    Et pourquoi ne pas changer le délimiteur de champs dans SQLPlus avec set colsep ...? C'est finalement la meilleure chose à faire. Sinon tout ce qu'il te reste est d'utiliser sed avec une description très précise de tes différents champs pour pouvoir placer des délimiteurs à la bonne place.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  9. #9
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Sinon, sur le même principe que ctac_ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ var="titi toto tutu tyty tata tete"
    $ vardeb="${var%% *}"
    $ varfin="${var##* }"
    $ varmi="${var% *}" varmi="${varmi#* }"
    $ echo $var
    titi toto tutu tyty tata tete
    $ echo $vardeb
    titi
    $ echo $varfin
    tete
    $ echo $varmi 
    toto tutu tyty tata
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 538
    Points : 19 360
    Points
    19 360
    Par défaut
    je plussoie CosmoKnacki : demande à sqlplus d'afficher un séparateur de champ, tu pourras ensuite lire et mettre le résultat dans un tableau bash :
    Code Bash : Sélectionner tout - Visualiser dans une fenêtre à part
    IFS='<separateurSQLplus>' read -ra tableau < <(sqlplus <optionSeparateur> <requete...>
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    J'ai essayé avec "set colsep" sans succès, il découpait n'importe comment.
    Du coup j'ai fait une requête du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    resultat=$(
    sqlplus -S 'TEST/TEST@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=HOST)(Port=1521))(CONNECT_DATA=(SID=TEST)))' <<EOF
    SET HEAD OFF
    select champs1 || '|' || champs2 || '|' || champs3 from table;
    exit
    EOF)
     
    champs1=$(echo $resultat | cut -d'|' -f1)
    champs2=$(echo $resultat | cut -d'|' -f2)
    champs3=$(echo $resultat | cut -d'|' -f3)
    ça fonctionne bien.
    Merci à tous pour votre aide, c'est top !

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 538
    Points : 19 360
    Points
    19 360
    Par défaut
    Code Bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    IFS='|' read -ra tableau < <(sqlplus -S 'TEST/TEST@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=HOST)(Port=1521))(CONNECT_DATA=(SID=TEST)))' <<EOF
    SET HEAD OFF
    select champs1 || '|' || champs2 || '|' || champs3 from table;
    exit
    EOF)
     
    echo "champ1: ${tableau[0]}"
    EDIT:
    et puis,
    J'ai essayé avec "set colsep" sans succès,
    mais quelle commande, précisément, as-tu entrée ?
    il découpait n'importe comment.
    et, on peut voir ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. [AC-2013] Comment bien rédiger une requête SQL en VBA avec des critères
    Par alexdre dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/08/2016, 11h21
  2. [MySQL] UPDATE avec des espaces dans les champs
    Par doubiste_59 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 29/07/2010, 15h41
  3. [AC-2003] Récupération résultats requête SQL dans VBA
    Par rberniga dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 19/08/2009, 12h28
  4. Réponses: 17
    Dernier message: 22/09/2006, 18h34
  5. JTable avec des JPanel dans les cellule
    Par pigpen dans le forum Composants
    Réponses: 11
    Dernier message: 13/04/2006, 20h58

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