Shell Variablen an SQL übergeben

Capper

Grünschnabel
Hai,

Ich habe folgendes Problem, ich möchte einem SQL Statement eine Shell Variable übergeben. Bislang hat das Script quasi standalone und händisch funktioniert, jetzt aber soll es automatisiert laufen.

Nun zum Scriptaufbau, das Script ist in 3 Teile unterteilt

* Erster Teil: Errechnen und ausgeben des Datums des Vortages
* Zweiter Teil: Daten aus der DB auslesen
* Dritter Teil: Aufbereiten der Daten zur Weiterverarbeitung


In Teil Eins, wird also das Datum des Vortages errechnet, in die benötigte Form formatiert und dann in eine Variable geschrieben. Diese Variable sollte nun verwendet werden um in Teil Zwei die Daten aus der DB auszulesen. Nun ist aber mein Problem, das ich nicht weis wie ich die Variable an SQL übergeben muss, damit SQL diese weiterverwendet.

Hier die verschiedenen Aufruf-Versuche von mir mit der entsprechenden Ausgabe:

Code1:
Code:
.
.........
export var1="$Tg-$Mon-$jh"
#echo $var1
export var2="$Tg.$smon.$sjh"
 
# Anmelden an SQLPLUS und auslesen der Redologanzahl des Vortags
 
sqlplus username/passwort <<$var2
SET heading OFF
SET pages 0
SET echo OFF
SET feed OFF
SET trimout ON
SET trims ON
spool /watcher/primus/program/hornek/temp/redo_$1.log
SELECT  TRUNC(FIRST_TIME),
        COUNT(SEQUENCE#)
FROM    v\$loghist
WHERE   FIRST_TIME >=   TO_DATE( '$1', 'DD.MM.YYYY' )
AND     FIRST_TIME <    TO_DATE( '$1', 'DD.MM.YYYY' ) + 1
GROUP   BY TRUNC(FIRST_TIME);
spool off
exit;

Ausgabe1:
SQL*Plus: Release 9.2.0.6.0 - Production on Wed Apr 11 11:20:43 2007

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.6.0 - Production

SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> 2 3 4 5 6 SQL> SQL> Disconnected from Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.6.0 - Production

Code2:
Code:
.........
export var1="$Tg-$Mon-$jh"
#echo $var1
export var2="$Tg.$smon.$sjh"

# Anmelden an SQLPLUS und auslesen der Redologanzahl des Vortags

sqlplus username/passwort <$var2                                                                                   
SET heading OFF
SET pages 0
SET echo OFF
SET feed OFF
SET trimout ON
SET trims ON
spool /watcher/primus/program/hornek/temp/redo_$1.log
SELECT  TRUNC(FIRST_TIME),
        COUNT(SEQUENCE#)
FROM    v\$loghist
WHERE   FIRST_TIME >=   TO_DATE( '$1', 'DD.MM.YYYY' )
AND     FIRST_TIME <    TO_DATE( '$1', 'DD.MM.YYYY' ) + 1
GROUP   BY TRUNC(FIRST_TIME);
spool off
exit;

Ausgabe2:
./redo_machen[196]: 11.04.2007: cannot open
./redo_machen[197]: SET: not found
./redo_machen[198]: SET: not found
./redo_machen[199]: SET: not found
./redo_machen[200]: SET: not found
./redo_machen[201]: SET: not found
./redo_machen[202]: SET: not found
./redo_machen[203]: spool: not found
./redo_machen[203]: syntax error at line 204 : `(' unexpected

Kann mir hier jemand weiterhelfen? Bin schon wieder am verzweifeln .

Grüßle Capper
 
Zuletzt bearbeitet:
Hab die Lösung selber raus bekommen. Wenn man bei der SQLplus Anmeldung noch ein "<<EOF" mit gibt kann man die Variablen aus dem Shellscript verwenden :) .
 
Zurück