Запустите сценарий Oracle SQL и выйдите из sqlplus.exe из командной строки.
Я хотел бы запустить сценарий Oracle через SQL Plus через командную строку Windows. Сценарий не содержит команду "выход", но я все же хотел бы завершить работу SQL Plus, возвращая управление в командную строку по завершении сценария. Моя цель - сделать это без изменения скрипта. Это возможно?
10 ответов
Другой способ - использовать эту команду в командном файле:
echo exit | sqlplus user/pass@connect @scriptname
Я нашел, что это лучшее решение, и оно работает в терминале или в скрипте:
echo @scriptname | sqlplus username/password@connect
Лучший способ скрыть информацию о пользователях и выходах:
exit | sqlplus -S user/pwd@server @script.sql
exit
выдается на выход sqlplus, заставляя его выйти. -S
подавляет весь вывод сервера, кроме SQL-запроса в скрипте.
Теперь, понимая, что ваша проблема может быть связана с самим файлом sql, вы должны понять, что для завершения работы sqlplus нужно указать. Я делаю это так:
выберите * из двойного; уволиться; /
(Косая черта важна. Она указывает sqlplus выполнить метки состояния над ней.)
Вы также можете сделать это в вашем сценарии оболочки.
sqlplus /nolog <<EOF
connect user/pass
@run_some_file.sql
select * from dual;
EOF
Вам может понадобиться убежать от ";" с \.
Да, это возможно - сгенерировать скрипт-обертку, который соответствующим образом настраивает SQLPlus, включает ваш скрипт (т.е. @YourTargetScript.sql
), а затем делает выход.
Тем не менее, я не рекомендую этот подход вообще - у SQLPlus есть очень много проблем для программного использования; при написании сценариев оболочки в прошлом, в которых использовался Oracle, я построил оболочку Python вокруг нее (добавив более разумное поведение при обработке ошибок, разумное разделение вывода между stdout/stderr, встроенную поддержку вывода CSV и другие подобные вкусности), и это сработало намного лучше.
Как это:
sqlplus / nolog идентификатор пользователя / пароль @tnsname @filename
Если вы поместите это в пакетный файл, контроль продолжится с оператором (ами), следующим за ним.
РЕДАКТИРОВАТЬ: мой плохо, попробуйте еще раз с / Nolog флаг
Для тех, кто обеспокоен безопасностью включения вашего пароля в скрипт, в AskTom есть статья о "внешне идентифицированном" http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:142212348066
В вашем скрипте SQL добавьте EXIT. Вот пример моего файла test.bat имеет следующее:
sqlplus user / pwd @ server @ test.SQL> myLOG.LOG
Мой файл test.sql имеет следующее: select * from dual; выход
Еще один для Linux без каналов или разветвления другой суб-оболочки /-процесса
sqlplus -S dbuser/dbpasswd@dbsid @scriptname </dev/null
После
@scriptname
завершено, sqlplus ожидает ввода пользователя. В этом случае sqlplus считывает конец файла из
/dev/null
и выходит из-за этого.
Выход | SQLPLUS /@ @
Это правильное решение, я пытался это работает