DB Abfrageergebnis Zeilenweise verarbeiten

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von trainnee#1, 21.08.2009.

  1. #1 trainnee#1, 21.08.2009
    trainnee#1

    trainnee#1 Jungspund

    Dabei seit:
    15.01.2009
    Beiträge:
    20
    Zustimmungen:
    0
    hiho

    ich habe mal wieder ein Problem.
    Und zwar habe ich ein Script, mit welchen ich aus einer Datenbank bestimmte Werte abfrage.
    Beispiel:
    SELECT name FROM tbl_names WHERE name=irgendwas;
    Ausgabe
    Name1
    Name2
    Name3
    Name4

    Ich möchte nun alle 4 Werte verarbeiten können.
    Ich habe das bisher versucht die Abfrage in eine Variable zu übergeben. Jedoch wird dabei nur der erste Wert übergeben.
    Ich habe auch schon ein Array in betracht gezogen, jedoch hat das bisher auch nicht wirklich Funktioniert.

    Hat jemand ein Tip was ich machen kann?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 HeadCrash, 21.08.2009
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Morgen,

    sowas wie

    Code:
    result=`mysql $Database -u$myuser -p$mypass -Be "SELECT name FROM tbl_names WHERE name=irgendwas;"`
    for name in $result; do
                    echo $name
    done
    
    sollte eigentlich gehn.

    mfg
    HeadCrash
     
  4. #3 trainnee#1, 21.08.2009
    trainnee#1

    trainnee#1 Jungspund

    Dabei seit:
    15.01.2009
    Beiträge:
    20
    Zustimmungen:
    0
    Ich habe deinen Vorschlag getestet und mein Problem besteht weiterhin.

    Ich habe es jedoch nicht 100% genau so gemacht wie du, da ich mit sqlplus arbeite. Prinzipiell habe ich aber das selber gemacht:

    Datenbankabfrage in Variable und dann mit for-Schleife auslesen.

    Das Problem liegt aber darin, dass nach der Abfrage nur der erste Wert, im Beispiel also nur Name1 in der Variable steht. Demnach auch nur Name1 ausgegeben wird in der Scleife.
     
  5. #4 floyd62, 21.08.2009
    Zuletzt bearbeitet: 21.08.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Hi,

    alternativ sollte auch etwas wie
    Code:
    mysql ... -Be 'SELECT name FROM tbl_names WHERE name=irgendwas;' |
    while read NAME; do
        echo $NAME
        ...
    done
    
    laufen; damit läufst du nicht in irgendwelche Probleme, wenn mal mehr Daten geliefert werden sollten, als in einer Variablen untergebracht werden können.

    Dass bei deinem ursprünglichen Ansatz nur der erste Wert übergeben wurde, kann ich nicht nachvollziehen; bei Interesse kannst du ja mal deinen Code posten, und man kann abchecken, was wirklich schief gegangen ist ...

    Gruss

    EDIT:
    Sehe gerade, dass du Oracle verwendest; dann eben etwas wie
    Code:
    (
    sqlplus -s $USER/$PW@$DB <<- !
            set heading off
            set feedback off
            set verify off
            SELECT name FROM tbl_names WHERE name=irgendwas;
    !
    ) |
    while read ...
    
     
  6. #5 trainnee#1, 21.08.2009
    Zuletzt bearbeitet: 21.08.2009
    trainnee#1

    trainnee#1 Jungspund

    Dabei seit:
    15.01.2009
    Beiträge:
    20
    Zustimmungen:
    0
    Hier mal mein Code:

    Code:
      sqlplus -s <<!EOF! | read SQLValue
      'User'/'Password'@'Server'
      SET PAGESIZE 0 FEEDBACK OFF TRIMOUT OFF;
      select name from names where status = 'INVALID';
    !EOF!
    
      for erg in ${SQLValue}; do
        echo $erg
      done
    

    Ok mein Problem hat sich Erledigt.
    Habe, mithilfe eines DBA´s, das Problem komplett auf Datenbankebene gelöst.
     
  7. #6 floyd62, 21.08.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Tja, und wenn du read nur einmal aufrufst, liest du natürlich auch nur die erste Zeile ein ... also entweder etwas wie SQLRESULTS=`sqlplus ...` verwenden und die Ergebnisse mit "for ..." auswerten, oder gleich, wie o.a., mit einer "while read ..."-Schleife die Ergebnisse einzeln/zeilenweise verarbeiten ...

    ;-)
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

DB Abfrageergebnis Zeilenweise verarbeiten

Die Seite wird geladen...

DB Abfrageergebnis Zeilenweise verarbeiten - Ähnliche Themen

  1. mysql Select Abfrageergebnis in unterschiedlichen Variablen sichern

    mysql Select Abfrageergebnis in unterschiedlichen Variablen sichern: Hallo zusammen, es geht um folgenden Teil meiner .sh-Datei: NumberCheck=`mysql $SQL_ARGS "SELECT lkw, Firma FROM adb_group WHERE...
  2. Abfrageergebnis teilweise in Notation!

    Abfrageergebnis teilweise in Notation!: Hallo, ich habe folgendes Problem: Wir machen ein Abfrage über Berechnungsergebnisse über den Query Analyzer. Diese Abfrage wird dann zu...
  3. Textdatei zeilenweise in durchnummerierte Variablen schreiben

    Textdatei zeilenweise in durchnummerierte Variablen schreiben: Hi Leute, ich versuche folgendes Problem zu lösen. Ich möchte eine Textdatei einlesen und den Inhalt jeder Zeile in immer eine neue Variable...
  4. Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

    Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql: Hallo Eventuell kann mir jemand bei meinem Problem helfen. Ich habe mich irgendwie total verrannt und komme nicht weiter. Die folgende...
  5. Zeilenweise suchen, löschen und ersetzen / Inhalt einfügen

    Zeilenweise suchen, löschen und ersetzen / Inhalt einfügen: Hallo liebe Community. Habe ein kleines Problem und bin leider nicht so der Linux-Freak... Ich hoffe mal ihr könnt mir da vielleicht ein wenig...