2009-10-28 28 views
39

¿Es posible hacer algo como esto?instrucción sqlplus desde la línea de comando

$ sqlplus -s user/pass "select 1 from dual" o
$ echo "select 1 from dual" | sqlplus -s user/pass

Sé que puedo poner select 1 from dual en un archivo y hacer esto:
$ sqlplus -s user/pass @myFile.sql

pero me pregunto si es realmente necesario para crear un archivo sólo para satisfacer sqlplus

+1

Posible duplicado - http://stackoverflow.com/questions/638705/how-can-issue-a-single-command-from-the-command-line-through-sql-plus – vapcguy

Respuesta

45

Solo tenga en cuenta que en Unix/Linux su nombre de usuario/contraseña puede ser visto por cualquiera que pueda ejecutar el comando "ps -ef" si lo coloca directamente en la línea de comando. Podría ser un gran problema de seguridad (o convertirse en un gran problema de seguridad).

Normalmente recomiendo crear un archivo o usar aquí el documento para que pueda proteger el nombre de usuario/contraseña de ser visto con el comando "ps -ef" en Unix/Linux. Si el nombre de usuario/contraseña está contenido en un archivo de script o archivo sql, puede protegerlo utilizando los permisos de lectura de usuario/grupo apropiados. A continuación, puede mantener al usuario/contraseña en el archivo de este tipo en un script de shell:

sqlplus -s /nolog <<EOF 
connect user/pass 
select blah; 
quit 
EOF 
+0

no siempre es cierto, según la versión de Oracle y el sistema operativo, pero probablemente sea un buen estándar para seguir – dpbradley

+0

demasiado malo Los heredoc no son fáciles en DOS http://stackoverflow.com/questions/1015163/heredoc- for-windows-batch – rogerdpack

+0

Lo que me pregunta es por qué la fuga de línea de comandos no está simplemente incluida en el programa de cliente sql, ya que sería bastante trivial: en la función main(), copie los args de línea de comando a una nueva variable, y sobrescribe los viejos args/argv [], y no hay línea de comandos visible (o - solo por una fracción de un milisegundo tal vez) - ¿por qué Oracle no implementa esa solución? –

6

Supongo que es * nix?

Uso "aquí el documento":

sqlplus -s user/pass <<+EOF 
select 1 from dual; 
+EOF 

EDIT: Me debería haber tratado el segundo ejemplo. Funciona, también (incluso en Windows, sans garrapatas):

$ echo 'select 1 from dual;'|sqlplus -s user/pw 

     1 
---------- 
     1 


$ 
24

soy capaz de ejecutar su consulta exacta con sólo hacer seguro de que es un punto y coma al final de mi instrucción de selección. (La salida es real, se han eliminado los parámetros de conexión.)

echo "select 1 from dual;" | sqlplus -s nombre de usuario/contraseña @ host: 1521/servicio

  1 
---------- 
     1 

No es que se debe importar, pero sqlplus se está ejecutando en el Mac OS X Snow Leopard y el servidor es Oracle 11g.

+0

+1, pero tenga en cuenta que si está haciendo algo medianamente complicado en SQL * Plus, generalmente hará algunas directivas SET y esto se volverá complicado si desea tener un comando de una línea. – dpbradley

+0

+1 Este es un útil delineador de líneas para ejecutar rápidamente consultas simples –

+0

+1 ¡Finalmente, la respuesta! ¡Agregando el punto y coma al final de la consulta! En realidad, puede ejecutar sqlplus, iniciar sesión y ejecutar los comandos; no es necesario que ingrese las credenciales. Mi problema era que los comandos no se estaban ejecutando, ¡los números de línea seguían incrementándose! Ahora sé cómo hacer que funcionen, ¡solo agrega un punto y coma! ¡Gracias! – vapcguy

20

Mi versión

$ sqlplus -s username/[email protected]:port/service <<< "select 1 from dual;" 


     1 
---------- 
     1 

EDIT:

Para multilínea se puede utilizar este

$ echo -e "select 1 from dual; \n select 2 from dual;" | sqlplus -s username/[email protected]:port/service 


     1 
---------- 
     1 


     2 
---------- 
     2 
+0

I * realmente * como esta, pero parece que no funciona en tcsh – dldnh

Cuestiones relacionadas