132 votos

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

Me gustaría ejecutar un Oracle script a través de SQL Plus mediante un símbolo del sistema de Windows. El script no contiene un comando de "salida", pero me gustaría que SQL Plus saliera, devolviendo el control al símbolo del sistema al finalizar el script. Mi objetivo es hacer esto sin modificando el script. ¿Es esto posible?

0 votos

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

161voto

Dave Costa Puntos 786

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

echo exit | sqlplus user/pass@connect @scriptname

1 votos

¿Sabéis cómo se añade el "exit" a la sesión de sqlplus?

6 votos

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, provocando la salida de sqlplus.

0 votos

Excelente - esto es exactamente lo que estaba buscando. Gracias.

17voto

Moose Factory Puntos 2075

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

echo @scriptname | sqlplus username/password@connect

1 votos

Si bien esto puede responder técnicamente a la pregunta, es sustancialmente un duplicado de otras respuestas y añade poco valor. Además, ayudaría a los demás si explicara lo que hacen estos comandos. Gracias.

7 votos

Esto me ha funcionado y me parece más elegante que la respuesta superior porque evita la "salida".

14voto

girish Puntos 31

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 forzándola a salir. -S suprime toda la salida del servidor que no sea la consulta sql en el script.

2 votos

Si se utiliza ssh es para hacer quit | en lugar de exit | para que no cierre su sesión de ssh si el archivo se edita más tarde para tener un exit o quit en él. Esto funciona si el archivo no se encuentra también.

9voto

Ethan Post Puntos 140

También puedes hacerlo en tu Shell ShellscriptShell.

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

Es posible que tenga que escapar el ";" con un \.

0 votos

Funciona, ¡Salvavidas!

4voto

Charles Duffy Puntos 407

Sí, es posible -- generar un wrapper script que configure SQLPlus adecuadamente, incluya su script (es decir. @YourTargetScript.sql ), y luego hace una salida.

Dicho esto, no recomiendo este enfoque en absoluto - SQLPlus tiene una gran cantidad de gotchas para el uso programático; al escribir Shell Shell en el pasado que utilizó Oracle, construí una envoltura de Python alrededor de ella (añadiendo un comportamiento más razonable de manejo de errores, la separación sana de la salida entre stdout / stderr, soporte de salida CSV nativo, y otras cosas), y que funcionó mucho mejor.

0 votos

Con cualquier otro programa estaría de acuerdo contigo. PERO encontré que SQLPlus me dio un contexto útil en una consulta mala que otros entornos (en mi caso Perl/DBI/DBD::Oracle) no me dieron. Si haces un manejo cuidadoso de los errores, eso puede valer la pena.

0 votos

Además, dependiendo del control que tengas sobre el servidor, podrás asumir o no la disponibilidad de algo más que Shell y SQLPlus. Muchas tiendas de Unix con Solaris, HP/UX, AIX y similares utilizan instalaciones muy básicas y no le permiten instalar nada más en la caja. Tenga en cuenta que, a veces, una solución a esto es simplemente incluir un intérprete mínimo con su aplicación.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: