In qualche modo, sembra che SQL * Plus (almeno su Windows) non sia in grado di individuare uno script con un percorso relativo quando viene chiamato con @@
e quando il percorso inizia con un punto singolo o doppio.
Ad esempio, in x:\some\where
Ho la seguente struttura di directory:
script.sql
main-dir\main-sub-dir
call-script.sql
script.sql
Cioè: due script.sql
ma in posizioni diverse.
Il contenuto di script.sql
just under x:\some\where
è semplicemente
prompt SCRIPT root
mentre il script.sql
contenuto dell'altro è
prompt SCRIPT main-dir/main-subdir
call-script.sql
legge
@@script.sql
@ script.sql
uscita prevista
Se avvio SQL * Plus da x:\some\where
e quindi faccio un
@main-dir/main-sub-dir/call-scripts
L'output sarà
SCRIPT main-dir/main-subdir
SCRIPT root
Questo è previsto, dal momento che il singolo @
dovrebbe cercare percorsi da dove è stato avviato SQL * Plus e @@
dovrebbe cercare percorsi dalla directory dello script contenente.
uscita imprevista
Ora , se cambio call-scripts.sql
così:
@@./script.sql
@ ./script.sql
il doppio @@
sembra cambiare il suo comportamento, in quanto cerca percorsi da dove è stato avviato SQL * Plus e l'output sarà ora
SCRIPT root
SCRIPT root
che non è quello che mi aspettavo.
Questo comportamento è documentato da qualche parte e, cosa più importante, come devo cambiare in call-scripts.sql
modo da chiamare @@../../other-dir/other-sub-dir/script
correttamente i percorsi relativi ( )?
strace
. Ecco le chiamate pertinenti: pastebin.com/cVK1QQu4 Si noti che non ha tentato di stat o accedere ai file "script.sql" in altre directory prima di tentare di aprire quelli visualizzati nell'output di pastebin.