Fehler beim Ausführen von Oracle-Skript über die Befehlszeile mit sqlplus

8

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.

    
Charlie 11.05.2010, 08:57
quelle

5 Antworten

14

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?

    
Alex Poole 11.05.2010, 09:35
quelle
13

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.

    
cwash 06.09.2013 19:21
quelle
5

Die einfache Antwort

Stellen Sie sicher, dass Sie beide "Ende" setzen; und in der letzten Zeile setzen Sie '/'

Es wird mit Leichtigkeit laufen.

    
Viren 09.04.2013 20:50
quelle
0

Anstatt die / bei der Eingabeaufforderung zu verwenden, stellen Sie sicher, dass Ihre Abfrage in der doit.sql mit einem Semikolon endet.

    
sandrows 10.07.2012 12:35
quelle
0

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:

  • Fehler (für einige Fehler, die Sie ändern können, wenn sie beendet werden oder nicht. Siehe WHENEVER plsql-Befehl)
  • Explicit exit (sowohl interaktiv als auch script)
  • Ende von STDIN (EOF)

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.

    
Naeel Maqsudov 12.12.2017 12:28
quelle

Tags und Links