problem mit oracle sqlplus mit Leerzeichen im Pfad der @ - Befehl
Ich bin mit Oracle 11g unter Linux und ich versuche, ein Skript ausführen, die beim erstellen meiner Datenbank. Das Skript läuft einwandfrei auf windows, aber wenn ich es testen unter Linux, erhalte ich die folgende Fehlermeldung:
SP2-0556: Invalid File Name
Das problem kann sein, dass der Pfad zu der Datei ein Leerzeichen enthält. Ich werde vereinfachen Sie das problem auf eine der vielen Befehle, die ich ausführen in die Datei, die es einfach zu machen. Der Beispiel-Befehl, den ich bin versucht zu starten sieht wie folgt aus:
sqlplus [uname]/[pw] @'../database/My Schema/create_sequence.sql'
den create_sequence.sql-Datei hat zwei einfache erstellen von Sequenz-Befehle, die gut laufen von selbst. Ich vermute stark es liegt an den Leerzeichen, denn wenn ich den Namen des Verzeichnisses ändern von Mein-Schema MySchema und verändern die oben sqlplus-Befehl entsprechend, wird das Skript läuft wunderbar.
Wie gesagt, das script funktioniert in windows mit dem Raum, aber nicht in Linux. Ich vermute Räume dürfen nicht unterstützt werden, aber ich Frage mich, ob jemand wusste, dass jeder andere oder gibt es einen work-around?
Seite Hinweis: mit einem Befehl wie:
more ../database/My\ Schema/create_sequence.sql
oder
more "../database/My Schema/create_sequence.sql"
druckt den Inhalt der Datei auf der Konsole wie man es erwarten würde. Also, ich denke, das ist sqlplus (und linux) bestimmte.
- Ich lief einen test mit Ihrem original-syntax auf einer solaris-box und es funktioniert Prima.
- oracle hat eine andere Binärdatei für solaris als auch linux. Und meine Befehle funktionieren unter Windows aber nicht Linux. Ich bin ein wenig überrascht, dass es funktioniert, auf solaris, da würde ich annehmen, der Quell-code näher an linux.
- Blick auf den bug-report habe ich festgestellt, es fiel mir ein, dass es wohl funktionierte, weil es ein 8i-Datenbank-Umgebung, und der bug aufgetaucht mit 10g und trug über in 11g.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich mit einer meiner Linux-Kisten und war sehr leicht in der Lage, um dieses Problem zu reproduzieren. Es scheint nicht zu irgendeiner Weise, die ich finden kann, die Datei auszuführen, die mit dem ' @ ' - option von der Befehlszeile aus also ich denke du bist mit den folgenden Optionen für die Arbeit Tips und Tricks:
Sollten Sie auch die Datei einen Bericht mit der Oracle-Unterstützung, da es eine einfache Lösung, die Sie bieten können.
Befehlen Beispiel:
Aus Dem Verzeichnis
Via stdin
Gut, wenn das ein Linux-Problem (siehe mein Kommentar auf deine Frage - es funktioniert auf Solaris), die Sie haben können, um zu versuchen, etwas entlang der Linien von:
Problemen, wenn Sie versuchen, um Parameter auf Ihre sql-Skript, aber...
EDIT: Es scheint ein Metalink Frage für ein sehr ähnliches problem: "Fehler 7150873 SQL-Skripten mit Dateinamen, die Leerzeichen enthalten Ergebnisse in SP2-0556". Es ist aufgelistet, wie Auswirkungen auf 10.2.0.4 und 11.1. Es ist angeblich behoben, 10.2.0.5 und 11.2, die weder verfügbar sind noch. Es sagt, dass es ein generisches Problem für die meisten/alle Plattformen, also ich weiß nicht, ob dies Ihr problem ist oder nicht.
Den betreffenden text in der Ausgabe: "Die SQLPLUS Befehl START fehlschlägt ausführen der SQL-Skripts, die ein Leerzeichen im Dateinamen."
Nur für grins, was passiert, wenn Sie Folgendes tun:
EDIT2: ich weiß nicht, ob Sie ändern Ihre Skripte Großhandel machbar ist oder nicht, aber ein workaround könnte sein:
Müssen Sie wickeln Sie jeden sqlplus aufrufen, auf diese Weise. Eine andere Möglichkeit ist, erstellen Sie ein shell-Skript, sagen wir mit einem Namen mysqlplus.sh:
Dann ändern Sie Ihre build-Skripte so:
Laut dieser thread auf die OTN-Website, SP2-0556 können verursacht werden durch ungültige Leerzeichen in der Datei, die ausgeführt wird. Wahrscheinlich ist die Linux-version von SQL-Plus nicht weiß, wie man mit den Windows-Zeilenende-Zeichen(s). Löschen Sie die vorhandene Datei und neu zu erstellen mit den gewünschten Befehlen (du hast gesagt, es sind nur 2 DDL-Befehle, also sollte es einfach sein).
Wenn Sie setzen Sie Anführungszeichen um den Pfad, es funktioniert:
Bedeutet dies nicht Arbeit:
haben Sie versucht, die Flucht der weißen Raum?
Versuchen:
Wenn Sie mit dem arbeiten unter linux können Sie entkommen den Raum, der mit einem ' \ ' - Zeichen wie:
Ich weiß, es ist eine alte Frage, aber ich lief einfach in der gleichen situation und nach vielen versuchen habe ich es zu arbeiten und ich möchte meine Lösung war es einfach den Pfad in Anführungszeichen so:
@"C:/Users/john/AppData/Roaming/SQL Entwickler/test.sql";
SP2-0310: unable to open file
. Aber die Datei existiert (ich kann zum Beispiel erfolgreichtype
es)