DB Abfrageergebnis Zeilenweise verarbeiten

T

trainnee#1

Jungspund
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?
 
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
 
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.
 
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 ...
 
Zuletzt bearbeitet:
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.
 
Zuletzt bearbeitet:
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 ...

;-)
 

Ähnliche Themen

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

web-cyradm: Anmeldung nicht möglich

UBB-Code in einem Array mit Hilfe einer Funktion ersetzen

Bei PostgreSQL als anderer als der angemeldete Nutzer verbinden - Wo liegt der Fehler

Zurück
Oben