Entah bagaimana, tampaknya SQL * Plus (setidaknya pada Windows) tidak dapat menemukan skrip dengan path relatif ketika dipanggil dengan @@
dan ketika path dimulai dengan satu atau dua titik.
Misalnya, di bawah x:\some\where
saya memiliki struktur direktori berikut:
script.sql
main-dir\main-sub-dir
call-script.sql
script.sql
Yaitu: dua script.sql
tetapi di lokasi yang berbeda.
Isi script.sql
hanya di bawah x:\some\where
ini sederhana
prompt SCRIPT root
sementara script.sql
konten lainnya adalah
prompt SCRIPT main-dir/main-subdir
call-script.sql
membaca
@@script.sql
@ script.sql
output yang diharapkan
Jika saya memulai SQL * Plus dari x:\some\where
dan kemudian lakukan a
@main-dir/main-sub-dir/call-scripts
Outputnya adalah
SCRIPT main-dir/main-subdir
SCRIPT root
Ini diharapkan, karena single @
seharusnya mencari jalur dari mana SQL * Plus dimulai dan @@
seharusnya mencari jalur dari direktori skrip yang berisi.
hasil yang tak terduga
Sekarang , jika saya mengubahnya call-scripts.sql
:
@@./script.sql
@ ./script.sql
ganda @@
tampaknya mengubah perilaku itu, karena mencari jalan dari mana SQL * Plus dimulai, dan output sekarang akan menjadi
SCRIPT root
SCRIPT root
yang bukan itu yang saya harapkan.
Apakah perilaku ini didokumentasikan di suatu tempat, dan yang lebih penting, bagaimana saya harus berubah call-scripts.sql
sehingga ia memanggil jalur relatif ( @@../../other-dir/other-sub-dir/script
) dengan benar?
strace
. Inilah panggilan-panggilan yang relevan: pastebin.com/cVK1QQu4 Perhatikan bahwa ia tidak mencoba untuk membuat stat atau mengakses file "script.sql" di direktori lain sebelum mencoba untuk membuka yang terlihat di output pastebin.