Ich habe ein Problem beim Versuch, mein SQL-Skript mit sqlplus in Oracle auszuführen. Das Skript füllt nur einige Dummy-Daten:
%Vor%Mein Skript funktioniert einwandfrei, wenn ich es mit Oracle SQL Developer ausführe, aber wenn ich das Befehlszeilenwerkzeug sqlplus verwende, wird dies ausgegeben und dann hängt es einfach:
%Vor%Ich führe das Werkzeug mit dieser Befehlszeile aus, was für andere Skripte gut funktioniert:
%Vor%Irgendwelche Ideen? Danke.
Sie müssen entweder ein exit
am Ende des Skripts setzen oder es als sqlplus username/password@server/dbname < Setup.sql
(d. h. umgeleitete Eingabe, <
anstelle von @
) ausführen. Sie können überprüfen, ob dies das Problem ist, indem Sie einfach 'exit' in die hängende Sitzung eingeben.
Wenn es wirklich hängt, haben Sie die Ausführung von Developer festgeschrieben oder rückgängig gemacht?
Ich sah dieses Problem auch bei bestimmten Skripten, die in einem Client wie TOAD funktionieren, aber wenn es über SQLPlus mit der @ script-Direktive ausgeführt wurde, anstatt zu hängen, gab der SQLPlus-Client eine Eingabeaufforderung mit einer Nummer zurück was der Anzahl der Zeilen im Skript entspricht, das ausgeführt wird (+1).
Wenn wir zum Beispiel ein Skript namens "doit.sql" mit 70 Zeilen ausgeführt haben, würden wir SQLPlus mit dem entsprechenden Befehl starten und folgendes eingeben:
> @doit.sql
Dann würden wir sehen:
71:
Wenn Sie an dieser Stelle die Eingabetaste drücken, wird
zurückgegeben 72:
Wir konnten diese Skripte ausführen, indem wir an der Eingabeaufforderung /
eingeben und die Eingabetaste drücken.
Die Befehlszeile
%Vor% bedeutet, dass sqlplus
das Skript Setup.sql
ausführen und interaktiv auf weitere Befehle warten soll (falls Skript exit
nicht explizit ausführt). Dies ist ein normales Verhalten von sqlplus
.
sqlplus
endet in drei Fällen:
WHENEVER
plsql-Befehl) exit
(sowohl interaktiv als auch script) Entweder im interaktiven Modus oder im Skript können Sie ^Z
-Zeichen senden, um den Eingabefluss sanft zu beenden. Interaktiv drücken Sie einfach Ctrl+Z,Enter
.
Und natürlich können Sie STDIN umleiten und aus der Datei nehmen, nicht von der Tastatur. Es gibt zwei ähnliche Möglichkeiten, dies zu tun:
%Vor% In beiden Fällen wird sqlplus
nach der Skriptausführung wegen EOF
im Eingabefluss beendet.