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\where
ich unter folgende Verzeichnisstruktur:
script.sql
main-dir\main-sub-dir
call-script.sql
script.sql
Das heißt: zwei, script.sql
aber an verschiedenen Orten.
Der Inhalt von script.sql
knapp unter x:\some\where
ist einfach
prompt SCRIPT root
während der script.sql
Inhalt 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\where
und 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.sql
damit 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.