BASH - Single Zitat nach innen doppelten Anführungszeichen für SQL Where-Klausel
Frage
Ich brauche einen richtig formatierte Datum Vergleich WHERE-Klausel zu einem Programm auf der Kommandozeile in bash zu senden.
Wenn es im Inneren des aufgerufenen Programms erhält, sollte die WHERE-Klausel für Oracle gültig und sollte wie folgt aussehen genau:
highwater>TO_DATE('11-Sep-2009', 'DD-MON-YYYY')
Der Datumswert ist in einer Variablen. Ich habe eine Vielzahl von Kombinationen von Zitaten und Schrägstrichen versucht. Anstatt das Problem zu verwirren und Beispiele für meine Fehler geben, ich hoffe auf eine unberührte genaue Antwort von dreck unbefleckt.
Wenn ich es in Perl schreiben war, die Zuordnung würde ich so aussehen denken:
$hiwaterval = '11-Sep-2009';
$where = "highwater>TO_DATE(\'$hiwaterval\', \'DD-MON-YYYY\')";
Wie erreiche ich den gleichen Effekt in der Bash?
Lösung
hiwaterval='11-Sep-2009'
where="highwater > TO_DATE('$hiwaterval', 'DD-MON-YYYY')"
optional hinzufügen „Export“ vor dem endgültigen Variable Einstellung, wenn es sichtbar ourside zu sein die aktuell Shell ist.
Andere Tipps
Haben Sie versucht, die Verwendung von zwei Ticks verwenden? Wie High-Water> TO_DATE ( '' 11-Sep-2009 '', '' DD-MON-YYYY ''). Nur ein Vorschlag. Ich habe es nicht ausprobiert.
Sie können die zuweisen where-Klausel wie folgt:
export WHERECLAUSE=`echo "where highwater >TO_DATE('11-Sep-2009', 'DD-MON-YYYY')"`
(mit Backticks um die Echo-Anweisung - sie zeigen nicht hier in meinem Lektor up ...)
, die arbeitet mit einem Shell-Skript der Form:
sqlplus /nolog <<EOS
connect $USERNAME/$PASSWD@$DB
select * from test $WHERECLAUSE
;
exit
EOS