Outra maneira é usar esse comando no arquivo em lotes:
echo exit | sqlplus user/pass@connect @scriptname
Eu gostaria de executar um script Oracle através do SQL Plus através de um prompt de comando do Windows. O script não contém um comando "exit", mas eu ainda gostaria que o SQL Plus saísse, retornando o controle para o prompt de comando ao concluir o script. Meu objetivo é fazer isso sem modificar o script. Isso é possível?
Descobri que esta é a melhor solução e funciona em um terminal ou em um script:
echo @scriptname | sqlplus username/password@connect
A melhor maneira de ocultar as informações e saídas do usuário é:
exit | sqlplus -S user/pwd@server @script.sql
exit
é fornecido para a saída do sqlplus, forçando-o a sair. -S
suprrespeita toda a saída do servidor, exceto a consulta sql no script.
Percebendo agora que seu problema pode estar no próprio arquivo sql, perceba que o sqlplus precisa ser avisado para sair. A maneira que eu faço isso é:
select * from dual; quit; /
(A barra é importante. Ela diz ao sqlplus para executar o statemet (s) acima dele.)
Você também pode fazer isso no seu script de shell.
sqlplus /nolog <<EOF
connect user/pass
@run_some_file.sql
select * from dual;
EOF
Você pode precisar escapar do ";" com um \.
Assim:
sqlplus /nolog userid/password@tnsname @filename
Se você colocar isso em um arquivo de lote, o controle continuará com a (s) instrução (ões) que o segue.
EDIT: Meu erro, tente novamente com / nolog flag
Sim, é possível - gerar um script de wrapper que configure o SQLPlus adequadamente, inclua seu script (ou seja, @YourTargetScript.sql
) e, em seguida, saia.
Dito isso, eu não recomendo essa abordagem - o SQLPlus tem muitas dicas para uso programático; ao escrever scripts shell no passado que usavam o Oracle, eu criei um wrapper do Python (adicionando um comportamento mais razoável de tratamento de erros, separação sadia de saída entre stdout / stderr, suporte de saída CSV nativo e outras coisas) e que funcionou muito melhor.
Para aqueles preocupados com a segurança de incluir sua senha no script, a AskTom tem um artigo sobre "identificado externamente" link
No seu script SQL, adicione EXIT. Aqui está um exemplo meu arquivo test.bat tem o seguinte:
usuário sqlplus / pwd @ server @ test.SQL > myLOG.LOG
meu arquivo test.sql tem o seguinte: selecione * do dual; sair
sair | SQLPLUS / @ @
Esta é a solução correta, eu tentei está funcionando