Bằng cách nào đó, dường như SQL * Plus (ít nhất là trên Windows) không thể định vị tập lệnh có đường dẫn tương đối khi được gọi bằng @@và khi đường dẫn bắt đầu bằng một dấu chấm đơn hoặc kép.
Ví dụ, dưới x:\some\wheretôi có cấu trúc thư mục sau:
script.sql
main-dir\main-sub-dir
              call-script.sql
              script.sql
Đó là: hai script.sqlnhưng tại các địa điểm khác nhau.
Nội dung của script.sqlchỉ x:\some\wheređơn giản là
prompt SCRIPT roottrong khi script.sqlnội dung của người kia là
prompt SCRIPT main-dir/main-subdircall-script.sql đọc
@@script.sql
@ script.sql
sản lượng dự kiến
Nếu tôi khởi động SQL * Plus x:\some\wherevà sau đó thực hiện
@main-dir/main-sub-dir/call-scriptsĐầu ra sẽ là
SCRIPT main-dir/main-subdir
SCRIPT root 
Điều này được mong đợi, vì đơn @được cho là tìm kiếm các đường dẫn từ nơi SQL * Plus được bắt đầu và @@được cho là tìm kiếm các đường dẫn từ thư mục chứa tập lệnh.
đầu ra bất ngờ
Bây giờ , nếu tôi thay đổi call-scripts.sqlnhư vậy:
@@./script.sql
@ ./script.sql
nhân đôi @@dường như thay đổi hành vi của nó, trong đó nó tìm kiếm các đường dẫn từ nơi SQL * Plus được bắt đầu và bây giờ đầu ra sẽ là
SCRIPT root
SCRIPT root
đó không phải là điều tôi mong đợi
Hành vi này có được ghi lại ở đâu đó không, và quan trọng hơn, làm thế nào để tôi phải thay đổi call-scripts.sqlđể nó gọi các đường dẫn tương đối ( @@../../other-dir/other-sub-dir/script) chính xác?
strace. Đây là các cuộc gọi có liên quan: pastebin.com/cVK1QQu4 Lưu ý rằng nó không cố gắng thống kê hoặc truy cập các tệp "script.sql" trong bất kỳ thư mục nào khác trước khi thử mở các thư mục được thấy trong đầu ra pastebin.