Irgendwie scheint es, dass SQL * Plus (zumindest unter Windows) kein Skript mit einem relativen Pfad finden kann, wenn es mit aufgerufen wird @@und wenn der Pfad mit einem einzelnen oder doppelten Punkt beginnt.
Zum Beispiel habe x:\some\whereich unter folgende Verzeichnisstruktur:
script.sql
main-dir\main-sub-dir
call-script.sql
script.sql
Das heißt: zwei, script.sqlaber an verschiedenen Orten.
Der Inhalt von script.sqlknapp unter x:\some\whereist einfach
prompt SCRIPT root
während der script.sqlInhalt des anderen ist
prompt SCRIPT main-dir/main-subdir
call-script.sql liest
@@script.sql
@ script.sql
erwartete Ausgabe
Wenn ich SQL * Plus von starte x:\some\whereund dann a
@main-dir/main-sub-dir/call-scripts
Die Ausgabe wird sein
SCRIPT main-dir/main-subdir
SCRIPT root
Dies wird erwartet, da die Single @Pfade suchen soll, von denen aus SQL * Plus gestartet wurde, und @@Pfade aus dem Verzeichnis des enthaltenen Skripts suchen soll.
unerwartete Ausgabe
Nun , wenn ich das ändere call-scripts.sql:
@@./script.sql
@ ./script.sql
Das Double @@scheint sein Verhalten zu ändern, indem es nach Pfaden sucht, von denen aus SQL * Plus gestartet wurde, und die Ausgabe nun erfolgt
SCRIPT root
SCRIPT root
Das ist nicht , was ich erwartet hatte.
Ist dieses Verhalten irgendwo dokumentiert und, was noch wichtiger ist, wie muss ich es ändern, call-scripts.sqldamit es relative Pfade ( @@../../other-dir/other-sub-dir/script) korrekt aufruft ?
strace. Hier sind die relevanten Aufrufe: pastebin.com/cVK1QQu4 Beachten Sie, dass nicht versucht wurde, "script.sql" -Dateien in anderen Verzeichnissen zu statisieren oder darauf zuzugreifen, bevor versucht wurde, die in der Pastebin-Ausgabe angezeigten zu öffnen.