Her nasılsa, SQL * Plus'ın (en azından Windows'ta) çağrıldığında @@ve yol tek veya çift nokta ile başladığında göreli yol içeren bir komut dosyasını bulamıyor gibi görünüyor .
Örneğin, altında x:\some\whereaşağıdaki dizin yapısına sahibim:
script.sql
main-dir\main-sub-dir
call-script.sql
script.sql
Yani: iki script.sqlama farklı yerlerde.
script.sqlAz altındaki içerik x:\some\wheresadece
prompt SCRIPT root
diğerinin script.sqliçeriği ise
prompt SCRIPT main-dir/main-subdir
call-script.sql okur
@@script.sql
@ script.sql
beklenen çıktı
SQL * Plus'ı çalıştırıp x:\some\wherebir
@main-dir/main-sub-dir/call-scripts
Çıktı
SCRIPT main-dir/main-subdir
SCRIPT root
Bu beklenir, çünkü tek @SQL * Plus'ın başlatıldığı @@yolları aramalı ve içeren komut dosyasının dizinindeki yolları aramalıdır.
beklenmedik çıktı
Şimdi , eğer bunu değiştirirsem call-scripts.sql:
@@./script.sql
@ ./script.sql
çift @@, davranışını değiştiriyor gibi görünüyor, çünkü SQL * Plus'ın başladığı yerden yollar arıyor ve çıktı şimdi olacak
SCRIPT root
SCRIPT root
hangi değil beklediğim.
Bu davranış bir yerde belgelenmiş ve daha da önemlisi, call-scripts.sqlgöreli yolları ( @@../../other-dir/other-sub-dir/script) doğru çağırmak için nasıl değiştirmek zorundayım ?
strace. İlgili aramalar şunlardır : pastebin.com/cVK1QQu4 Yapıştırmalı çıktıda görülenleri açmaya çalışmadan önce "script.sql" dosyalarına başka bir dizinde erişmeye veya bunlara erişmeye çalışmadığını unutmayın.