Запустите сценарий 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 /@ @

Это правильное решение, я пытался это работает

Другие вопросы по тегам