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\whereMam następującą strukturę katalogów:
script.sql
main-dir\main-sub-dir
call-script.sql
script.sql
To znaczy: dwa, script.sqlale w różnych lokalizacjach.
Treść script.sqltuż poniżej x:\some\wherejest po prostu
prompt SCRIPT root
podczas gdy druga script.sqlstrona 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\wherea 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.sqlaby @@../../other-dir/other-sub-dir/scriptpoprawnie 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.