Oracle sqlplus: относительные пути, начинающиеся с позиции скрипта - PullRequest
6 голосов
/ 15 декабря 2009

Когда у меня есть два sql-файла, один из них в подкаталоге

main_test.sql
sub/sub_test.sql

и sub_test.sql вызывает @../main_test.sql (или @@../main_test.sql), тогда это прекрасно работает при выполнении его из подкаталога

sub> sqlplus xxx @ sub_test.sql

Но когда я звоню

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

это приводит к

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

поскольку путь вычисляется из моего рабочего каталога, а не из каталога вызываемого мной файла sql.

Есть ли способ использовать относительные пути, начиная с каталога файла, содержащего вызов?

Ответы [ 3 ]

3 голосов
/ 15 декабря 2009

Позор URL файла 'не поддерживается - так как на самом деле это работает очень хорошо, когда используются пути' http://'!

Я настроил 'sub_test \ sub_test.sql', чтобы он содержал двойные числа:

@@../main.sql

поместите всю структуру каталогов в контекст Tomcat webapps / ROOT, и он будет работать, если вы позвоните так:

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

Наверное, немного излишне настраивает веб-сервер? (Тоже работает с FTP видимо - не пробовал).

1 голос
/ 15 декабря 2009

(Мне кажется, что имя файла в строке с ошибкой SP2-0310 было введено неправильно. Я считаю, что файл, который вы хотели указать, был "../main_test.sql", и я продолжу это линия).

Если вы находитесь в каталоге, содержащем main_test.sql и выполняете sub / sub_test.sql, а внутри sub / sub_test.sql вы вызываете main_test.sql как "../main_test.sql", да, вы вы получите ошибку, потому что ваш текущий рабочий каталог содержит main_test.sql, поэтому поиск одного уровня каталога с помощью ".." не сработает. В этом случае вам нужно либо удалить «..», либо использовать «.» (один период - указывает текущий каталог), чтобы заставить вещи работать.

Делись и наслаждайся.

1 голос
/ 15 декабря 2009

Боюсь, я не знаю, как этого добиться, но это иллюстрирует одну из проблем этого подхода с использованием сценариев.

Я помню, когда я начинал с Oracle в v7.1. Что бы мы ни использовали сценарии практически для всего, но было так много задач, которые можно было выполнить только с помощью внешних сценариев, так что вы могли бы также использовать их для всего. Однако я думаю, что было меньше причин делать это с каждым выпуском, и единственные, которые у меня сейчас есть, были бы реорганизованы в pl / sql с 11g.

...