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\where
Tenho a seguinte estrutura de diretórios:
script.sql
main-dir\main-sub-dir
call-script.sql
script.sql
Ou seja: dois, script.sql
mas em locais diferentes.
O conteúdo de " script.sql
under under" x:\some\where
é simplesmente
prompt SCRIPT root
enquanto o script.sql
conteú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\where
e 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.sql
assim:
@@./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.sql
para 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.