Pregunta Ejecute el script Oracle SQL y salga de sqlplus.exe a través del símbolo del sistema


Me gustaría ejecutar un script de Oracle a través de SQL Plus a través de un símbolo del sistema de Windows. La secuencia de comandos no contiene un comando de "salida", pero aún así me gustaría que salga SQL Plus, devolviendo el control al indicador de comandos al completar la secuencia de comandos. Mi objetivo es hacer esto. sin modificando el script. es posible?


101
2017-09-22 23:33


origen


¿Está ejecutando esto con "sqlplus .... <scriptname" o "sqlplus ... @scriptname"? Encuentro diferentes comportamientos dependiendo de cuál hagas en Unix. - runrig


Respuestas:


Otra forma es usar este comando en el archivo por lotes:

echo exit | sqlplus user/pass@connect @scriptname

128
2017-09-23 12:28



¡Guay! ¿Sabes cómo la "salida" se añade a la sesión de sqlplus?
El comando sqlplus ejecuta el script y luego intenta leer más comandos de la entrada estándar. Con esta canalización, la lectura de la entrada estándar leerá la cadena "exit" del comando echo, lo que provocará la salida de sqlplus. - Dave Costa
Excelente - esto es exactamente lo que estaba buscando. ¡Gracias! - JoshL
Tenga en cuenta que expone la contraseña de su nombre de usuario a través de la lista de procesos en unix (ps -ef), pero estoy casi seguro de que funciona de la misma manera en Windows - Robert Merkwürdigeliebe
stackoverflow.com/questions/1639704/… y dba.stackexchange.com/a/65064/16892 Describe algunas formas de no tener que usar la contraseña en la línea de comandos ... - rogerdpack


Encontré que esta es la mejor solución y funciona en una terminal o dentro de un script:

echo @scriptname | sqlplus username/password@connect

12
2017-10-26 12:21



Si bien esto puede responder técnicamente a la Pregunta, es sustancialmente un duplicado de otras Respuestas y agrega poco valor. Además, ayudaría a otros si explicara lo que están haciendo estos comandos. ¡Gracias! - Chris S
Esto me funcionó y lo encuentro más elegante que la respuesta principal porque evita la "salida". - Bogdan Calmac


La mejor manera de ocultar la información del usuario y las salidas es:

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

exit Se suministra a la salida de sqlplus obligándolo a salir. -S Suprime todas las salidas del servidor, excepto la consulta SQL en el script.


12
2018-03-18 21:20



Si usar ssh es dejar de hacerlo | en lugar de salir | de modo que no cierre su sesión ssh si el archivo se edita más tarde para tener una salida o salir en él. Esto funciona si el archivo no se encuentra también. - Karl Henselin


Al darse cuenta de que su problema puede estar en el propio archivo SQL, debe darse cuenta de que se debe indicar a sqlplus que salga. La forma en que hago esto es:

seleccione * desde dual;

dejar;
/

(La barra es importante. Le dice a sqlplus que ejecute los estados por encima de ellos).


11
2017-09-23 16:04



Tenga en cuenta que la respuesta de Dave Costa también funciona: canalizar exit (o quit) en el comando sqlplus.
Gracias por el / truco, estaba buscando esta información!
La barra diagonal significa ejecutar lo que está en el búfer de SQL. No ejecuta varias instrucciones, y no es necesario ejecutar comandos de control de SQLPlus como "salir". Si escribe "salir" <Enter> en un indicador interactivo de SQLPlus, se cerrará inmediatamente. - Dave Costa


También puedes hacer esto en tu shell script.

sqlplus /nolog <<EOF
connect user/pass
@run_some_file.sql
select * from dual;
EOF

Es posible que tenga que escapar de la ";" con un \.


6
2017-09-23 12:33





Me gusta esto:

sqlplus / nolog userid / password @ tnsname @filename

Si coloca esto en un archivo por lotes, el control continuará con las declaraciones que lo siguen.

EDIT: Mi mal, intente de nuevo con / nolog flag


4
2017-09-22 23:43



Desafortunadamente, esto no funciona. Cuando ejecuto el archivo por lotes, SqlPlus espera en la solicitud de SQL> para la entrada del usuario en lugar de devolver el control a la solicitud de comando. - JoshL
Lo siento, esto tampoco funciona. / nolog permite que sqlplus se inicie sin iniciar sesión. No tiene nada que ver con salir de un script cuando se completa. - JoshL
Hmm, estoy empezando a preguntarme acerca de las diferencias ambientales. Tengo numerosos scripts de bat que usan sqlplus de esta manera.
Chris, ¿podrías dar un ejemplo de trabajo? Solo algo simple que ejecuta un "select * from dual" o algo así ... He creado ejemplos para probar sus sugerencias, sin éxito. Recuerda que esto está en Windows. - JoshL
Josh, ver nueva respuesta a continuación.


Sí, es posible: genere un script de envoltorio que configure SQLPlus de manera apropiada, incluya su script (es decir, @YourTargetScript.sql), y luego hace una salida.

Dicho esto, no recomiendo este enfoque en absoluto: SQLPlus tiene muchas trampas para el uso programático; Al escribir scripts de shell en el pasado que usaban Oracle, construí un envoltorio de Python a su alrededor (agregando un comportamiento de manejo de errores más razonable, una separación sensata de salida entre stdout / stderr, soporte de salida de CSV nativo y otras cosas similares), y funcionó mucho mejor.


3
2017-09-22 23:40



Con cualquier otro programa estaría de acuerdo contigo. PERO encontré que SQLPlus me dio un contexto útil en una consulta errónea que otros entornos (en mi caso, Perl / DBI / DBD :: Oracle) no hicieron. Si estás haciendo un manejo cuidadoso de los errores, puede valer la pena.
Además, dependiendo del control que tenga sobre el servidor, puede o no puede asumir la disponibilidad de algo más que shell y SQLPlus. Una gran cantidad de tiendas de Unix más stogier que ejecutan Solaris, HP / UX, AIX y similares utilizan muy pocas instalaciones y no le permitirán instalar nada más en la caja. Tenga en cuenta que a veces una solución a esto es simplemente agrupar un intérprete mínimo con su aplicación. - ConcernedOfTunbridgeWells


Para aquellos preocupados por la seguridad de incluir su contraseña en el script, AskTom tiene un artículo sobre "identificado externamente" http://asktom.oracle.com/pls/apex/f?p=100:11:0::::11_QUESTION_ID:142212348066


1
2017-07-16 19:38



Si bien esto puede responder teóricamente a la pregunta, sería preferible para incluir las partes esenciales de la respuesta aquí, y proporcionar el enlace de referencia. - Scott Pack


En su Script SQL agregue SALIR. Aqui es ejemplo Mi archivo test.bat tiene lo siguiente:

usuario de sqlplus / pwd @ server @ test.SQL> myLOG.LOG

Mi archivo test.sql tiene lo siguiente: seleccione * desde dual; salida


0
2018-06-19 20:40



Eso está bien, pero no cumple con el requisito de hacer esto sin modificar la secuencia de comandos para incluir una instrucción exit / quit. La intención es que estos scripts puedan ejecutarse mediante un DBA desde SQL Plus, pero también pueden ejecutarse desde un archivo por lotes. - JoshL