dbzugriff aus ksh skript

Diskutiere dbzugriff aus ksh skript im Shell-Skripte Forum im Bereich Programmieren unter Linux/Unix; Ich möchte aus einem ksh skript heraus zwei werte aus einer tabelle in eine variable lesen ohne diese vorher in eine temporäre Datei zu schreiben....

  1. #1 belubaba, 23.09.2005
    belubaba

    belubaba Tripel-As

    Dabei seit:
    20.09.2005
    Beiträge:
    184
    Zustimmungen:
    0
    Ich möchte aus einem ksh skript heraus zwei werte aus einer tabelle in eine variable lesen ohne diese vorher in eine temporäre Datei zu schreiben.

    hat dazu jemand eine Idee?

    Folgendes habe ich in meinem skript:

    Code:
    sqlplus sqluser/sqlpassword@datenbank << EOF 2>&1 >> sql.log
    select user, password from meine_tabelle where name='Horst Mueller';
    commit;
    exit
    EOF
    Problem 1: wie bekomme ich das Ergebnis in eine Variable ohne vorher eine Ausgabeumlenkung in eine Datei gemacht zu haben?

    Problem 2: Wie vermeide ich das ein Ergebnis in dieser Form ausgegeben wird

    SQL>
    USER PASSWORD
    ------------------------------ --------------------
    horst geheim

    SQL>

    schliesslich will ich nur die Werte horst und geheim in meinen Variablen ...

    bb
     
  2. #2 neutrino1, 29.09.2005
    neutrino1

    neutrino1 Mitglied

    Dabei seit:
    03.05.2005
    Beiträge:
    30
    Zustimmungen:
    0
    Hi!

    Uns so sollte es gehen:

    Code:
    set -A ARRAYNAME $(echo "
    whenever sqlerror exit 1
    Set pagesize 0
    Set Feedback off
    select user, password from meine_tabelle where name='Horst Mueller';
    quit"|sqlplus -s sqluser/sqlpassword@datenbank)
    In ${ARRAYNAME[0]} steht "horst", in ${ARRAYNAME[1]} steht "geheim".

    Ciao
     
  3. #3 Cyber, 30.09.2005
    Zuletzt bearbeitet: 30.09.2005
    Cyber

    Cyber .:DISTORTED:.

    Dabei seit:
    16.05.2003
    Beiträge:
    999
    Zustimmungen:
    0
    Ort:
    D -> BW -> Karlsruhe
    Ich hab mir mal nen sql-select auf ne oracle-db als funktion gebastelt, vielleicht hilfts dir weiter :)

    Code:
    sql_select ()
    {
       # NAME:     sql_select
       # DESC:     Executes an SQL-SELECT and stores the values in the given Array
       # PARAM:    $1 as Name of Array, $2 as num of cols , $3 sql-statement (without SELECT)
       # RETVAL:   Num of rows selected
       # COMMENT:  i.e. VARPREF="myvar" then: myvar_0[0], myvar_0[1], myvar_1[0], ... (myvar_ROW[COL])
    
       VARPREF=$1
       COLS=$2
       COMMAND=$3
       ROWS=0
         
       # Read values from database   
       unset READVAR
       READVAR=`sqlplus [B]DB_USER/DB_PWD[/B] <<_EOJ6 | sed -e '/Plus/,/SQL/d' -e '/<@>/,/PL\/SQL/d'| grep -v "SQL" | grep -vi "zeilen"
    
          set linesize 9999;
          set pagesize 500;
          set heading off;
          set tab off;
          set colsep '~';
          
          SELECT $COMMAND
          EXIT;
    _EOJ6`
          
       col=0
       row=0
       pos=1
       
       echo "$READVAR" | sed -e 's/ \{4,\}//g' -e '/#.*/d' -e '/^$/d' -e '/^[     ]*$/d'| while read line
       do
          pos=1
          col=0
          while [ $pos -le $COLS ]
          do
             VARNAME=$VARPREF"_"$row[$col]
             VALUE=`echo "$line" | cut -f$pos -d~`
             
             eval $VARNAME="\"$VALUE\""
             col=`expr $col + 1`
             pos=`expr $pos + 1`
          done
          row=`expr $row + 1`
          ROWS=`expr $ROWS + 1`
       done
       
      return $ROWS;  
    }
    
    Aufruf innerhalb des scripts mit z.B.:
    Code:
    sql_select "OTTO" "1" "parent_id from $table where id=12345;";
    
    sql_select "HANS" "2" "b.addr, b.inf FROM $table b WHERE b.id=12345 AND b.parent_id=0;"
    
     
  4. niLs

    niLs òle òle

    Dabei seit:
    10.06.2004
    Beiträge:
    153
    Zustimmungen:
    0
    Ort:
    Hannover
    wieso nimmst du nicht php?
     
  5. oenone

    oenone Freier Programmierer[Mod]

    Dabei seit:
    22.08.2002
    Beiträge:
    599
    Zustimmungen:
    0
    Ort:
    Mannheim
    oder besser: perl xD

    auf bald
    oenone
     
  6. #6 belubaba, 04.10.2005
    belubaba

    belubaba Tripel-As

    Dabei seit:
    20.09.2005
    Beiträge:
    184
    Zustimmungen:
    0
    Vielen Dank für die Beispiele.

    Die sind etwas eleganter als die Lösung die ich schlussendlich gefunden habe.

    php und perl kann ich aus verfahrenstechnischen Gründen nicht nutzen ...

    bb
     
  7. #7 belubaba, 07.10.2005
    belubaba

    belubaba Tripel-As

    Dabei seit:
    20.09.2005
    Beiträge:
    184
    Zustimmungen:
    0
    Hi Cyber,

    das mein Skript etwas umfangreicher geworden ist und ich einige SQL Aufrufe darin habe, wollt ich diesen Vorschlag übernehmen.

    Funktioniert auch auf der Kommandozeile.
    Aber sobald ich das in ein Skript packe bekomme ich folgende Meldung:

    ./sqltest.sh[23]: syntax error at line 23 : `<<' unmatched

    Das ist dieser Teil hier

    Code:
       READVAR=`sqlplus DB_USER/DB_PWD [B] <<_EOJ6[/B]  | sed -e '/Plus/,/SQL/d' -e '/<@>/,/PL\/SQL/d'| grep -v "SQL" | grep -vi "zeilen"
    
          set linesize 9999;
          set pagesize 500;
          set heading off;
          set tab off;
          set colsep '~';
          
          SELECT $COMMAND
          EXIT;
    _EOJ6`
    
    Nach dem ich dutzende sinnige und unsinnige Dinge ausprobiert habe um das zu fixen fällt mir wirklich nichts mehr ein woran das liegen kann.

    Laut manpage muss ich nur führende Whitspaces vermeiden. Ich habe ähnliche Funktionen auch schon in anderen Skripten und die funktionieren tadellos.

    Kann das daran liegen das ich beim kopieren des Codes irgendein nicht sichtbares Steuerzeichen mit in das Skript kopiert habe?

    bb
     
  8. #8 belubaba, 07.10.2005
    belubaba

    belubaba Tripel-As

    Dabei seit:
    20.09.2005
    Beiträge:
    184
    Zustimmungen:
    0
    ... was mich darauf gebracht hat diesen Teil des Skriptes einfach mal abzutippen ....

    Muss tatsächlich ein Steuerzeichen gewesen sein.
    Jetzt funktionierts :)

    bb
     
  9. Cyber

    Cyber .:DISTORTED:.

    Dabei seit:
    16.05.2003
    Beiträge:
    999
    Zustimmungen:
    0
    Ort:
    D -> BW -> Karlsruhe
    Alla hopp, dann viel Spaß noch :)
     
  10. #10 flugopa, 26.05.2009
    flugopa

    flugopa Der lernwillige

    Dabei seit:
    27.05.2006
    Beiträge:
    739
    Zustimmungen:
    0
    Ort:
    München
    Hallo Cyber,

    Dein Beispiel ist interessant und kommt in abgewandelter Form sicherlich später zum Einsatz.
     
Thema:

dbzugriff aus ksh skript

Die Seite wird geladen...

dbzugriff aus ksh skript - Ähnliche Themen

  1. Sudo in Skripten

    Sudo in Skripten: Hallo, ich schreibe gerade an einem Deployment-Skript, was Dateien von einer Debian-Maschine auf einen Remote-Server (ebenfalls Debian) kopiert....
  2. HandbrakeCLI Shell Skript

    HandbrakeCLI Shell Skript: Hallo zusammen und Schöne grüße aus Süddeutschland. Ich versuche mich gerade an einem Skript für Handbrake. Ich bin ein Anfänger , und habe mir...
  3. Shell Skript beschleunigen

    Shell Skript beschleunigen: Hallo zusammen, ich bin neu hier und hab gerade angefangen mich an Schell Skripte zu wagen. Nun hab eine Frage ich hab ein Skript geschrieben und...
  4. Kontextmenü mit einem Skript verbinden

    Kontextmenü mit einem Skript verbinden: Abend, wenn ich z. B. eine simple Umwandlung eines Bildformates in ein anderes über das KDE-Kontextmenü (Servicemenü nennt es sich im KDE oder...
  5. [Erledigt] Shell-Skript lässt sich nicht mit Cron ausführen

    [Erledigt] Shell-Skript lässt sich nicht mit Cron ausführen: Hallo, ich hoffe ihr könnt mir helfen. Ich entwerfe im Moment ein Skript, welches den Callmonitor (Telnet) auf meiner FritzBox abfragt und wenn...