Jakoś wydaje się, że SQL * Plus (przynajmniej w systemie Windows) nie jest w stanie zlokalizować skryptu ze ścieżką względną, gdy jest wywoływany za pomocą @@
i gdy ścieżka zaczyna się od pojedynczej lub podwójnej kropki.
Na przykład w obszarze x:\some\where
Mam następującą strukturę katalogów:
script.sql
main-dir\main-sub-dir
call-script.sql
script.sql
To znaczy: dwa, script.sql
ale w różnych lokalizacjach.
Treść script.sql
tuż poniżej x:\some\where
jest po prostu
prompt SCRIPT root
podczas gdy druga script.sql
strona jest
prompt SCRIPT main-dir/main-subdir
call-script.sql
czyta
@@script.sql
@ script.sql
oczekiwany wynik
Jeśli uruchomię SQL * Plus od, x:\some\where
a następnie zrobię
@main-dir/main-sub-dir/call-scripts
Wyjście będzie
SCRIPT main-dir/main-subdir
SCRIPT root
Jest to oczekiwane, ponieważ singiel @
ma przeszukiwać ścieżki, z których SQL * Plus został uruchomiony, i @@
powinien przeszukiwać ścieżki z katalogu zawierającego skrypt.
nieoczekiwany wynik
Teraz , jeśli to zmienię call-scripts.sql
:
@@./script.sql
@ ./script.sql
double @@
wydaje się zmieniać swoje zachowanie, ponieważ przeszukuje ścieżki, z których SQL * Plus został uruchomiony, a wynik będzie teraz
SCRIPT root
SCRIPT root
czego się nie spodziewałem.
Czy to zachowanie jest gdzieś udokumentowane, a co ważniejsze, jak muszę to zmienić, call-scripts.sql
aby @@../../other-dir/other-sub-dir/script
poprawnie wywoływało ścieżki względne ( )?
strace
. Oto odpowiednie wywołania: pastebin.com/cVK1QQu4 Zauważ, że nie próbował on stat lub uzyskać dostępu do plików „script.sql” w żadnym innym katalogu przed próbą otwarcia plików widocznych w danych wyjściowych pastebin.