Я хотел бы запустить сценарий 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 / @ @
Это правильное решение, я пробовал работать