Gostaria de executar um script Oracle por meio do SQL Plus por meio 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 ao prompt de comando na conclusão do script. Meu objetivo é fazer isso sem modificar o script. Isso é possível?
Outra maneira é usar este comando no arquivo de lote:
Achei essa a melhor solução e funciona em um terminal ou dentro de um script:
Percebendo agora que seu problema pode ser com o próprio arquivo sql, perceba que o sqlplus precisa ser informado para sair. A maneira que eu faço isso é:
(A barra é importante. Ela diz ao sqlplus para executar o(s) statemet(s) acima dela.)
A melhor maneira de ocultar informações e saídas do usuário é:
exit
é fornecido à saída do sqlplus forçando-o a sair.-S
suprime toda a saída do servidor que não seja a consulta sql no script.Você também pode fazer isso em seu script de shell.
Você pode precisar escapar do ";" com um \.
Sim, é possível - gere um script wrapper que configure o SQLPlus adequadamente, inclua seu script (ou seja.
@YourTargetScript.sql
) e, em seguida, faça uma saída.Dito isso, eu não recomendo essa abordagem de forma alguma -- o SQLPlus tem muitas armadilhas para uso programático; ao escrever scripts de shell no passado que usavam Oracle, construí um wrapper Python em torno dele (adicionando um comportamento de manipulação de erros mais razoável, separação sã de saída entre stdout/stderr, suporte de saída CSV nativo e outros recursos), e isso funcionou muito melhor.
Assim:
Se você colocar isso em um arquivo de lote, o controle continuará com a(s) instrução(ões) que o seguem.
EDIT: Foi mal, tente novamente com o sinalizador /nolog
Para aqueles preocupados com a segurança de incluir sua senha no script, o AskTom tem um artigo sobre "identificado externamente" http://asktom.oracle.com/pls/apex/f?p=100:11:0:::: P11_QUESTION_ID:142212348066
Em seu script SQL adicione EXIT. Aqui está o exemplo que meu arquivo test.bat tem o seguinte:
sqlplus usuário/pwd@server @test.SQL > myLOG.LOG
meu arquivo test.sql tem o seguinte: select * from dual; saída
Outro para Linux sem pipes ou bifurcando outro sub-shell/-process
Após
@scriptname
a conclusão, o sqlplus aguarda a entrada do usuário. Nesse caso, o sqlplus lê um final de arquivo/dev/null
e sai, por causa disso.