2016-07-27 38 views
0

Ich habe ein ksh-Skript, das ein SQL-Skript namens report.sql aufruft.Parameter vom Shell-Skript zum SQL-Skript übergeben

$ORACLE_HOME/bin/sqlplus swb/[email protected] @$reportHome/report.sql 

Derzeit wird dieser SQL-Skript wird für sysdate aus der Datenbank Abrufen von Daten.

Ich möchte ein Datum als Eingabe für das SQL-Skript übergeben, so dass es Daten für dieses Datum statt Sysdate auswählt.

Wie kann ich ein Datum von ksh an SQL * Plus übergeben?

Antwort

0

With substitution variables; start entspricht @ hier.

Sie haben nicht die SQL-Bericht enthält gezeigt, aber an einem gewissen Punkt unter der Annahme, haben Sie so etwas wie:

where some_col > to_date('&1', 'YYYY-MM-DD') 

und dann passiert ein Datum:

where some_col > trunc(sysdate) 

Sie das ändern würde String im gleichen Format auf der Kommandozeile:

$ORACLE_HOME/bin/sqlplus swb/[email protected] @$reportHome/report.sql 2016-07-27 

Der Wert, den Sie übergeben, z. 2016-07-27, ist der erste Positionsparameter, daher kann er unter Verwendung von &1 als Substitutionsvariable referenziert werden. Da es sich um eine Zeichenfolge handelt, die in einfache Anführungszeichen eingeschlossen werden muss, wenn Sie sie in SQL referenzieren. Und weil es eine Zeichenkette ist, müssen Sie sie in ein Datum umwandeln. Das Format der Zeichenfolge, die Sie übergeben, muss dem Format entsprechen, das Sie mit der to_date()-Funktion angeben.

Seien Sie auch vorsichtig bei der Weitergabe von Monatsnamen, da Sie zu irgendeinem Zeitpunkt Sprachprobleme haben könnten, und idealerweise würden Sie ein Format verwenden, das eindeutig ist. Ich habe das ISO-Format YYYY-MM-DD verwendet, und wenn man mit dem Stick können Sie auch a date literal verwenden, da die Substitution durch SQL erfolgen * Plus-bevor es von dem SQL-Engine interpretiert wird:

where some_col > date '&1'