D'une certaine manière, il semble que SQL * Plus (au moins sous Windows) ne parvienne pas à localiser un script avec un chemin d'accès relatif lorsqu'il est appelé avec @@
et lorsque le chemin d'accès commence par un point simple ou double.
Par exemple, sous x:\some\where
J'ai la structure de répertoires suivante:
script.sql
main-dir\main-sub-dir
call-script.sql
script.sql
C'est-à-dire: deux script.sql
mais à des endroits différents.
Le contenu d'un script.sql
peu moins x:\some\where
est simplement
prompt SCRIPT root
tandis que le script.sql
contenu de l'autre est
prompt SCRIPT main-dir/main-subdir
call-script.sql
lit
@@script.sql
@ script.sql
production attendue
Si je démarre SQL * Plus à partir de x:\some\where
, puis fais un
@main-dir/main-sub-dir/call-scripts
La sortie sera
SCRIPT main-dir/main-subdir
SCRIPT root
Cela est attendu, car le single @
est censé rechercher des chemins à partir de l'endroit où SQL * Plus a été démarré et @@
est censé rechercher des chemins à partir du répertoire du script contenant.
sortie inattendue
Maintenant , si je change call-scripts.sql
ainsi:
@@./script.sql
@ ./script.sql
le double @@
semble changer son comportement, en ce sens qu'il recherche les chemins d'où SQL * Plus a été démarré, et la sortie sera désormais
SCRIPT root
SCRIPT root
ce qui n'est pas ce que j'attendais.
Ce comportement est-il documenté quelque part et, plus important encore, comment dois-je changer call-scripts.sql
pour qu'il appelle @@../../other-dir/other-sub-dir/script
correctement les chemins relatifs ( )?
strace
. Voici les appels pertinents: pastebin.com/cVK1QQu4 Notez qu'il n'a pas tenté de stat ou d'accéder aux fichiers "script.sql" dans d'autres répertoires avant d'essayer d'ouvrir ceux vus dans la sortie pastebin.