Так чи інакше здається, що 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
а потім роблю a
@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" в будь-яких інших каталогах, перш ніж намагатися відкрити ті, які бачать у виведенні пастіна.