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\where
tô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.sql
nhưng tại các địa điểm khác nhau.
Nội dung của script.sql
chỉ x:\some\where
đơn giản là
prompt SCRIPT root
trong khi script.sql
nội dung của người kia là
prompt SCRIPT main-dir/main-subdir
call-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\where
và 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.sql
như 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.