De alguna manera, parece que SQL * Plus (al menos en Windows) no puede ubicar un script con una ruta relativa cuando se llama con @@
y cuando la ruta comienza con un punto simple o doble.
Por ejemplo, en x:\some\where
Tengo la siguiente estructura de directorios:
script.sql
main-dir\main-sub-dir
call-script.sql
script.sql
Es decir: dos script.sql
pero en diferentes lugares.
El contenido de script.sql
justo debajo x:\some\where
es simplemente
prompt SCRIPT root
mientras que el script.sql
contenido del otro es
prompt SCRIPT main-dir/main-subdir
call-script.sql
lee
@@script.sql
@ script.sql
Rendimiento esperado
Si inicio SQL * Plus desde x:\some\where
y luego hago un
@main-dir/main-sub-dir/call-scripts
La salida será
SCRIPT main-dir/main-subdir
SCRIPT root
Esto se espera, ya que @
se supone que el single busca rutas desde donde se inició SQL * Plus y @@
se supone que busca rutas desde el directorio del script que lo contiene.
salida inesperada
Ahora , si cambio call-scripts.sql
así:
@@./script.sql
@ ./script.sql
el doble @@
parece cambiar su comportamiento, ya que busca rutas desde donde se inició SQL * Plus, y la salida ahora será
SCRIPT root
SCRIPT root
que no es lo que esperaba
¿Está este comportamiento documentado en alguna parte y, lo que es más importante, cómo debo cambiar call-scripts.sql
para que llame @@../../other-dir/other-sub-dir/script
correctamente a las rutas relativas ( )?
strace
. Estas son las llamadas relevantes: pastebin.com/cVK1QQu4 Tenga en cuenta que no intentó realizar estadísticas ni acceder a los archivos "script.sql" en ningún otro directorio antes de intentar abrir los que se ven en la salida de pastebin.