อย่างใดดูเหมือนว่า 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
นั้นให้ทำ
@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" ในไดเรกทอรีอื่น ๆ ก่อนที่จะพยายามเปิดสิ่งที่เห็นในเอาต์พุตของ pastebin