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