2009-12-15 6 views
6

Wenn ich zwei SQL-Dateien haben, einer von ihnen in einem UnterverzeichnisOracle sqlplus: relative Pfade in der Position des Skripts starten

main_test.sql 
sub/sub_test.sql 

und sub_test.sql Anrufe @../main_test.sql (oder @@../main_test.sql), dann fein funktioniert dies bei der Ausführung es aus dem Unterverzeichnis

sub> sqlplus xxx @ sub_test.sql 

Aber wenn ich rufe

sub> cd .. 
> sqlplus xxx @ sub/sub_test.sql 

diese Ergebnisse in

SP2-0310: unable to open file "../main_test.sql" 

da der Weg von meinem Arbeitsverzeichnis ausgewertet, nicht das Verzeichnis der SQL-Datei, die ich nennen.

Gibt es eine Möglichkeit, relative Pfade ausgehend vom Verzeichnis der Datei zu verwenden, die den Aufruf enthält?

Antwort

3

Schande die 'Datei' URL wird nicht unterstützt - da dies wirklich funktioniert sehr gut bei Verwendung von 'http: //' Pfade!

ich einrichten ‚sub_test \ sub_test.sql‘ die Doppel ats enthalten:

@@../main.sql 

die gesamte Verzeichnisstruktur unter einem Tomcat webapps/ROOT Kontext zu setzen und es funktioniert, wenn Sie wie folgt aufrufen:

SQL> @http://host:port/sub_test/sub_test.sql 

Wahrscheinlich ein bisschen Overkill Einrichten eines Web-Servers, denke ich ?? (Funktioniert auch mit FTP anscheinend - nicht ausprobiert).

+0

Danke fürs ausprobieren und teilen :) Da brauche ich nicht wirklich Ich glaube nicht, dass ich einen Webserver einrichten werde. –

1

Ich kenne keine Möglichkeit, dies zu erreichen, fürchte ich, aber es zeigt eines der Probleme dieses gehosteten Skriptansatzes.

Ich erinnere mich zurück, als ich mit Oracle in v7.1 begann. Was auch immer wir Skripte für fast alles verwenden würden, aber es gab so viele Aufgaben, die nur mit externen Skripten erreicht werden konnten, die Sie für sie auch verwenden könnten. Ich denke jedoch, dass es bei jeder Veröffentlichung weniger Gründe dafür gab, und die einzigen, die ich jetzt habe, würden mit 11g auf pl/sql umgestellt werden.

+0

Was, sogar DDL-Skripte? – APC

+0

Meinst du DDL als Teil einer neuen Codebereitstellung oder als Teil eines regulären Stapeljobs (z. B.)? –

1

(Es sieht für mich wie der Dateiname in der Zeile mit dem SP2-0310 Fehler wurde falsch eingegeben. Ich glaube, dass die Datei, die Sie angeben wollten war "../main_test.sql" und ich werde weitermachen diese Linie).

Wenn Sie sich in dem Verzeichnis befinden, das main_test.sql enthält und Sie sub/sub_test.sql ausführen, und innerhalb von sub/sub_test.sql rufen Sie main_test.sql als "../main_test.sql" auf, ja, Sie erhalten einen Fehler, weil Ihr aktuelles Arbeitsverzeichnis das ist, das main_test.sql enthält. Es wird also nicht funktionieren, nach einer Verzeichnisebene mit ".." zu suchen. In diesem Fall müssen Sie entweder ".." entfernen oder "." (einzelne Periode - zeigt das aktuelle Verzeichnis an), um die Dinge zum Laufen zu bringen.

Teilen und genießen.

+1

Danke! Ich weiß, dass ich es in "." würde in diesem Fall helfen, aber dann würde es natürlich nicht aus dem Hauptverzeichnis funktionieren. Was ich mir vorgenommen habe, ist eine Möglichkeit, dem Skript mitzuteilen, dass es nicht das aktuelle Arbeitsverzeichnis für relative Pfade, sondern das Verzeichnis, in dem sich das Skript befindet, verwendet.Das Skript "weiß", wo die anderen Skripte mit seiner eigenen Position verglichen werden, und ich möchte es nicht mein aktuelles Arbeitsverzeichnis berücksichtigen, das nicht relevant ist ... –