SQL-Abfrage funktioniert nicht in Unix-Shell-Skript

0

Ich verwende die Shell-Variable in der SQL-Anweisung und diese Variable ist vom Typ String. Wenn ich das folgende Skript ausführe, erhalte ich die Ausgabe als 'keine Zeilen ausgewählt', aber wenn ich dieselbe Auswahlabfrage in der SQL-Eingabeaufforderung ausführe, erhalte ich die richtige Ausgabe durch Ersetzen von $ var durch 'os' im Skript, aber immer noch nicht benötigte Ausgabe

var="os"
user="system"
pass="2451"
ou=$(sqlplus -s $user/$pass <<EOF
select login,subject from timetable where subject=$var;
exit;
EOF
)
echo $ou
user3411451
quelle

Antworten:

0

Die ausgeführte Anweisung lautet in diesem Fall:

select login,subject from timetable where subject=os;

Es vergleicht das Zeilensubjekt mit der (nicht existierenden / systemeigenen) Var "os", die nicht existiert.

Sie müssen abhängig von der verwendeten Datenbank Klammern wie folgt hinzufügen:

select login,subject from timetable where subject=\'$var\';
davidbaumann
quelle
Es gibt den folgenden Fehler ORA-00911: ungültige Zeichentabelle mit subject = \ 'os \'
user3411451
Versuchen Sie es ohne Backslashes
davidbaumann