SQL Plus изменить текущий каталог

Как изменить текущий каталог в SQL Plus под окнами.

Я пытаюсь написать скрипт с несколькими командами "@filename".

Я знаю, что можно открыть скрипт с помощью команды File --> Open, которая изменит текущий каталог, но я ищу способ сделать это автоматически без присмотра.


Разрешение

Основываясь на ответе Plasmer, я установил переменную среды SQLPATH в Windows и получил то, что мне подходит. Командой HOST не пробовал ставить (сомневаюсь, что получится).

Ответ Pourquoi Litytestdata хороший, но мне он не подойдет (каталоги слишком далеко друг от друга). И, конечно, правильный ответ Гая, что это невозможно. Я проголосую за этих двоих и приму ответ Плазмера.


person Andrew Stein    schedule 03.02.2009    source источник
comment
Для всех, кто сталкивается с этим, обратите особое внимание на ответ Тома. Скорее всего, это проблема. Вы должны использовать команду cd в Windows ПЕРЕД запуском команды 'sqlplus'. Компакт-диск должен изменить каталог на тот, который содержит скрипт для запуска.   -  person user1567453    schedule 02.10.2014


Ответы (9)


Не могли бы вы использовать переменную среды SQLPATH, чтобы указать sqlplus, где искать сценарии, которые вы пытаетесь запустить? Я считаю, что вы могли бы использовать HOST для установки SQLPATH в скрипте.

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

person Plasmer    schedule 03.02.2009

Вот что я делаю.

Определите переменную, которая поможет вам:

define dir=C:\MySYSTEM\PTR190\Tests\Test1

@&dir\myTest1.sql

Вы не можете cd в SQL*Plus (вы можете cd использовать команду host, но поскольку это дочерний процесс, настройка не сохранится в вашем родительском процессе).

person Tom    schedule 15.04.2010
comment
Хорошее простое решение. Небольшое обновление, однако... Вам нужен знак = между каталогом и C:\... - person Craig; 22.03.2011

Я не думаю, что вы можете изменить каталог в SQL * Plus.

Вместо смены каталога вы можете использовать @@filename, который читается в другом скрипте, расположение которого относительно каталога, в котором запущен текущий скрипт. Например, если у вас есть два скрипта

C:\Foo\Bar\script1.sql
C:\Foo\Bar\Baz\script2.sql

то script1.sql может запустить script2.sql, если он содержит строку

@@Baz\script2.sql

См. это для получения дополнительной информации о @@.

person Luke Woodward    schedule 03.02.2009
comment
@@ у меня работает только тогда, когда script2 находится в том же каталоге, что и script1. Текст, который вы связали, также говорит, что @@ запустит скрипт sqlplus, который находится в том же каталоге, что и скрипт, который его вызвал. Приведенный вами пример действительно работает для вас? - person Karl Bartel; 10.09.2009
comment
@Karl: работает ли @@, если вы используете косую черту вместо обратной? - person Luke Woodward; 17.09.2009
comment
-1, потому что это работает только в том особом случае, когда sqlplus был запущен из C:\Foo\Bar. Начните с любого другого каталога, и команда завершится ошибкой с SP2-0310: невозможно открыть файл. - person Rob van Wijk; 17.09.2014

Я не думаю, что вы можете!

/home/export/user1 $ sqlplus / 
> @script1.sql
> HOST CD /home/export/user2
> @script2.sql

script2.sql должен быть в /home/export/user1.

Вы либо используете полный путь, либо выходите из сценария и снова запускаете sqlplus из нужного каталога.

#!/bin/bash
oraenv .
cd /home/export/user1
sqlplus / @script1.sql
cd /home/export/user2
sqlplus / @script2.sql

(как-то так - делаю это по памяти!)

person Guy    schedule 03.02.2009
comment
script2.sql должен находиться в /home/export/user: вы имеете в виду /home/export/user1 (опечатка?)? - person Hans Deragon; 08.05.2018
comment
@HansDeragon - Блин, опечатка (почти) 10-летней давности! - person Guy; 08.06.2018
comment
запустите sqlplus из нужного каталога. какая концепция! :) - person theRiley; 31.10.2019

С новым SQLcl от Oracle теперь есть команда cd и сопутствующий pwd. SQLcl можно загрузить здесь: http://www.oracle.com/technetwork/developer-tools/sqlcl/overview/index.html

Вот краткий пример:

SQL>pwd
/Users/klrice/
NOT_SAFE>!ls *.sql
db_awr.sql  emp.sql     img.sql     jeff.sql    orclcode.sql    test.sql
db_info.sql fn.sql      iot.sql     login.sql   rmoug.sql

SQL>cd sql
SQL>!ls *.sql
003.sql             demo_worksheet_name.sql     poll_so_stats.sql
1.sql               dual.sql            print_updates.sql

SQL>
person Kris Rice    schedule 10.06.2018

Вы пытались создать ярлык Windows для sql plus и установить рабочий каталог?

person Chetan S    schedule 03.02.2009

Я думаю, что лучше всего для этого подходит переменная окружения SQLPATH — если у вас несколько путей, введите их через точку с запятой (;). Имейте в виду, что если среди каталогов есть файлы скриптов с одинаковыми именами, то будет выполнен первый попавшийся (по порядку ввода путей), второй будет проигнорирован.

person eRick    schedule 11.08.2016

Спустя годы у меня была такая же проблема. Мое решение - создание временного пакетного файла и еще одного экземпляра sqlplus:

В первом SQL-скрипте:

:
set echo off
spool sqlsub_tmp.bat
prompt cd /D D:\some\dir
prompt sqlplus user/passwd@tnsname @second_script.sql
spool off
host sqlsub_tmp.bat
host del sqlsub_tmp.bat
:

Обратите внимание, что «second_script.sql» нуждается в операторе «выход» в конце, если вы хотите вернуться к первому.

person IOIO    schedule 06.02.2017
comment
Я использую echo exit | sqlplus ... довольно часто. - person Álvaro González; 30.12.2019

для меня обстрел делает работу, потому что он дает вам возможность запустить [любую] команду в оболочке:

http://www.dba-oracle.com/t_display_current_directory_sqlplus.htm

короче смотрите текущий каталог:

!pwd

Измени это

!cd /path/you/want

person Dirk Schumacher    schedule 22.08.2016
comment
Как уже сказал Том выше, а Гай подтвердил экспериментом, это не работает. Ваша любая команда запускается в дочернем процессе оболочки и влияет на это, но не на sql*plus. - person Quigi; 02.09.2016