Почему-то кажется, что 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.