Назад | Перейти на главную страницу

Запустите сценарий Oracle SQL и выйдите из sqlplus.exe через командную строку

Я хотел бы запустить сценарий Oracle через SQL Plus через командную строку Windows. Сценарий не содержит команды «exit», но я все равно хотел бы, чтобы SQL Plus завершил работу, вернув управление командной строке после завершения сценария. Моя цель сделать это без изменение скрипта. Это возможно?

Другой способ - использовать эту команду в пакетном файле:

echo exit | sqlplus user/pass@connect @scriptname

Я считаю, что это лучшее решение, и оно работает в терминале или в скрипте:

echo @scriptname | sqlplus username/password@connect

Понимая теперь, что ваша проблема может быть связана с самим файлом sql, поймите, что sqlplus нужно сказать о выходе. Я делаю это так:

select * from dual;

quit;
/

(Косая черта важна. Она указывает sqlplus выполнить указанное выше состояние.)

Лучший способ скрыть информацию о пользователе и выходах:

exit | sqlplus -S user/pwd@server @script.sql

exit подается на вывод sqlplus, заставляя его выйти. -S подавляет весь вывод сервера, кроме запроса sql в скрипте.

Вы также можете сделать это в сценарии оболочки.

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 userid/password@tnsname @filename

Если вы поместите это в пакетный файл, управление продолжится с помощью следующих за ним операторов.

РЕДАКТИРОВАТЬ: Моя ошибка, попробуйте еще раз с флагом / nolog

Для тех, кто беспокоится о безопасности включения вашего пароля в сценарий, в AskTom есть статья о «внешнем распознавании». http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:142212348066

Еще один для Linux без каналов или разветвления другой суб-оболочки / -процесса

sqlplus -S dbuser/dbpasswd@dbsid @scriptname </dev/null

После @scriptname завершено, sqlplus ожидает ввода пользователя. В этом случае sqlplus считывает конец файла из /dev/null и выходит из-за этого.

В вашем сценарии SQL добавьте EXIT. Вот пример моего файла test.bat:

sqlplus пользователь / pwd @ server @ test.SQL> myLOG.LOG

мой файл test.sql имеет следующее: select * from dual; выход

выход | SQLPLUS / @ @

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