De alguma forma, parece que o SQL * Plus (pelo menos no Windows) não consegue localizar um script com um caminho relativo quando chamado com @@e quando o caminho começa com um ponto simples ou duplo.
Por exemplo, em x:\some\whereTenho a seguinte estrutura de diretórios:
script.sql
main-dir\main-sub-dir
call-script.sql
script.sql
Ou seja: dois, script.sqlmas em locais diferentes.
O conteúdo de " script.sqlunder under" x:\some\whereé simplesmente
prompt SCRIPT root
enquanto o script.sqlconteúdo do outro é
prompt SCRIPT main-dir/main-subdir
call-script.sql lê
@@script.sql
@ script.sql
resultado esperado
Se eu iniciar o SQL * Plus x:\some\wheree depois fizer um
@main-dir/main-sub-dir/call-scripts
A saída será
SCRIPT main-dir/main-subdir
SCRIPT root
Isso é esperado, já que o single @deve procurar caminhos a partir de onde o SQL * Plus foi iniciado e @@deve procurar caminhos no diretório do script que o contém.
saída inesperada
Agora , se eu mudar call-scripts.sqlassim:
@@./script.sql
@ ./script.sql
o duplo @@parece mudar seu comportamento, na medida em que pesquisa caminhos de onde o SQL * Plus foi iniciado, e a saída será agora
SCRIPT root
SCRIPT root
o que não é o que eu esperava.
Esse comportamento está documentado em algum lugar e, mais importante, como preciso alterar call-scripts.sqlpara que ele chame caminhos relativos ( @@../../other-dir/other-sub-dir/script) corretamente?
strace. Aqui estão as chamadas relevantes: pastebin.com/cVK1QQu4 Observe que ele não tentou stat nem acessou os arquivos "script.sql" em outros diretórios antes de tentar abrir os vistos na saída do pastebin.