किसी तरह, ऐसा लगता है कि एसक्यूएल * प्लस (कम से कम विंडोज पर) एक स्क्रिप्ट को एक रिश्तेदार पथ के साथ खोजने में असमर्थ है, जब बुलाया जाता है @@
और जब पथ एकल या डबल डॉट के साथ शुरू होता है।
उदाहरण के लिए, 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
अपेक्षित उत्पादन
अगर मैं एसक्यूएल * प्लस से शुरुआत करता हूं x:\some\where
और फिर ए
@main-dir/main-sub-dir/call-scripts
आउटपुट होगा
SCRIPT main-dir/main-subdir
SCRIPT root
यह अपेक्षित है, क्योंकि सिंगल को @
उन रास्तों की खोज करनी है, जहाँ से SQL * प्लस को शुरू किया गया था और @@
जिसमें स्क्रिप्ट की डायरेक्टरी से रास्ते खोजने थे।
अप्रत्याशित उत्पादन
अब , अगर मैं call-scripts.sql
ऐसा बदलता हूं :
@@./script.sql
@ ./script.sql
डबल @@
यह व्यवहार बदलने के लिए, जबकि इसमें से रास्तों जहां एसक्यूएल * प्लस शुरू किया गया था खोज रहा है, और उत्पादन अब हो जाएगा
SCRIPT root
SCRIPT root
जो मुझे उम्मीद नहीं थी।
क्या इस व्यवहार को कहीं और प्रलेखित किया गया है, और इससे भी महत्वपूर्ण call-scripts.sql
बात यह है कि मुझे कैसे बदलना होगा ताकि यह सापेक्ष रास्तों ( @@../../other-dir/other-sub-dir/script
) को सही ढंग से बुलाए?
strace
। यहां प्रासंगिक कॉल हैं: pastebin.com/cVK1QQu4 ध्यान दें कि यह किसी अन्य निर्देशिका में "script.sql" फ़ाइलों को स्टेटबैंक आउटपुट में देखे गए लोगों को खोलने का प्रयास करने से पहले स्टेटस या एक्सेस करने का प्रयास नहीं करता था।