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

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\';

Es gibt den folgenden Fehler ORA-00911: ungültige Zeichentabelle mit subject = \ 'os \'
user3411451

Versuchen Sie es ohne Backslashes
davidbaumann
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.