どういうわけか、SQL * Plus(少なくともWindowsでは)が呼び出され@@、パスが単一または二重のドットで始まる場合、相対パスを持つスクリプトを見つけることができないようです。
たとえばx:\some\where、次のディレクトリ構造があります。
script.sql
main-dir\main-sub-dir
call-script.sql
script.sql
つまり、2つです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
double @@は、SQL * Plusが開始された場所からパスを検索するという点で、動作を変更しているように見え、出力は次のようになります。
SCRIPT root
SCRIPT root
これは私が期待したものではありません。
この動作はどこかに文書化されていますか、そしてもっと重要なcall-scripts.sqlことは、相対パス(@@../../other-dir/other-sub-dir/script)を正しく呼び出すように変更するにはどうすればよいですか?
strace。:ここでは、関連する通話ですpastebin.com/cVK1QQu4注それはペーストビン出力で見られるものを開こうとする前に、任意の他のディレクトリ内のstatまたはアクセス「script.sql」ファイルにしようとしなかったことを。