2009-12-15 11 views
6

Quando ho due sql-files, uno di loro in una sotto-directoryOracle sqlplus: percorsi relativi che iniziano alla posizione dello script

main_test.sql 
sub/sub_test.sql 

e sub_test.sql chiamate @../main_test.sql (o @@../main_test.sql) allora questo funziona bene quando si esegue dal sotto-directory

sub> sqlplus xxx @ sub_test.sql 

Ma quando chiamo

sub> cd .. 
> sqlplus xxx @ sub/sub_test.sql 

questo si traduce in

SP2-0310: unable to open file "../main_test.sql" 

dal momento che il percorso viene valutato dalla mia directory di lavoro, non la directory del file di sql-io chiamo.

C'è un modo per utilizzare percorsi relativi a partire dalla directory del file che contiene la chiamata?

risposta

3

Peccato che l'URL del 'file' non sia supportato, poiché in effetti funziona molto bene quando si utilizzano i percorsi 'http: //'!

ho istituito 'sub_test \ sub_test.sql' per contenere il doppio ats:

@@../main.sql 

mettere l'intera struttura della directory sotto un Tomcat webapps contesto/ROOT e funziona se si chiama in questo modo:

SQL> @http://host:port/sub_test/sub_test.sql 

Probabilmente un po 'di overkill che installa un web-server, immagino ?? (Funziona anche con FTP apparentemente - non provato).

+0

Grazie per aver provato e condiviso :) Come non ho davvero bisogno questo, non penso che sto andando a creare un web-server però. –

1

Non conosco un modo per raggiungere questo obiettivo, ma illustra uno dei problemi di questo approccio di script ospitato.

Mi ricordo quando ho iniziato con Oracle in v7.1. Qualunque cosa avremmo usato gli script per quasi tutto, ma c'erano così tanti compiti che potevano essere raggiunti solo con script esterni che potreste anche usarli per tutto. Tuttavia, penso che ci siano stati meno motivi per farlo con ogni versione, e gli unici che ho ora sarebbero refactored in pl/sql con 11g.

+0

Cosa, anche gli script DDL? – APC

+0

Intendi DDL come parte di una nuova distribuzione del codice o come parte di un lavoro batch regolare (ad esempio). –

1

(Mi sembra che il nome file nella riga con l'errore SP2-0310 sia stato erroneamente scritto. Credo che il file che intendevi indicare fosse "../main_test.sql" e procederò lungo quella linea).

Se sei nella directory contenente main_test.sql ed esegui sub/sub_test.sql, e all'interno di sub/sub_test.sql stai invocando main_test.sql come "../main_test.sql", sì, riceverai un errore perché la tua directory di lavoro corrente è quella che contiene main_test.sql, quindi cercare un livello di directory usando ".." non funzionerà. In questo caso dovrai rimuovere il ".." o usare "." (singolo periodo - indica la directory corrente) per far funzionare le cose.

Condividi e divertiti.

+1

Grazie! So che cambiandolo in "." sarebbe di aiuto in quel caso, ma poi non funzionerebbe dalla directory principale, naturalmente. Quello che stavo pensando è un modo per dire allo script di non prendere la directory di lavoro corrente per i percorsi relativi, ma la directory in cui si trova effettivamente lo script.Lo script "sa" dove gli altri script vengono confrontati con la propria posizione, e vorrei che non considerasse la mia attuale directory di lavoro che non è rilevante ... –

Problemi correlati