Почему-то кажется, что SQL * Plus (по крайней мере, в Windows) не может найти скрипт с относительным путем при вызове с помощью @@
и когда путь начинается с одинарной или двойной точки.
Например, у x:\some\where
меня есть следующая структура каталогов:
script.sql
main-dir\main-sub-dir
call-script.sql
script.sql
То есть: два, script.sql
но в разных местах.
Содержание script.sql
просто под x:\some\where
просто
prompt SCRIPT root
в то время script.sql
как содержание другого
prompt SCRIPT main-dir/main-subdir
call-script.sql
читает
@@script.sql
@ script.sql
ожидаемый результат
Если я запускаю SQL * Plus с, x:\some\where
а затем делаю
@main-dir/main-sub-dir/call-scripts
Выход будет
SCRIPT main-dir/main-subdir
SCRIPT root
Это ожидается, поскольку сингл @
должен искать пути с того места, где был запущен SQL * Plus, и @@
должен искать пути из директории содержащего скрипта.
неожиданный вывод
Теперь , если я изменю call-scripts.sql
так:
@@./script.sql
@ ./script.sql
двойник, @@
похоже, меняет свое поведение, поскольку он ищет пути, с которых был запущен SQL * Plus, и теперь вывод будет
SCRIPT root
SCRIPT root
это не то, что я ожидал.
Задокументировано ли это поведение где-то, и что более важно, как я должен изменить его, call-scripts.sql
чтобы он @@../../other-dir/other-sub-dir/script
правильно вызывал относительные пути ( )?
strace
. Вот соответствующие вызовы: pastebin.com/cVK1QQu4 Обратите внимание, что он не пытался выполнить стат или доступ к файлам «script.sql» в любых других каталогах, прежде чем пытаться открыть те, которые видны в выводе pastebin.