2009-03-12 24 views
38

Uso de SQL Plus, puede ejecutar un scriptcon el operador "@" desde la línea de comandos, como en:¿Cómo puedo emitir un solo comando desde la línea de comando a través de sql plus?

c:\>sqlplus username/[email protected] @"c:\my_script.sql" 

Pero es posible ejecutar sólo un solo comando con una sintaxis similar sin un archivo de script separado? Como en:

c:\>sqlplus username/[email protected] @execute some_procedure 

Estoy interesado en esto porque quiero escribir un archivo por lotes que simplemente ejecuta un comando, sin generar un montón de archivos de dos líneas ".sql".

Respuesta

59

soy capaz de ejecutar una consulta SQL canalizando a SQL * Plus:

@echo select count(*) from table; | sqlplus username/[email protected] 

Dale

@echo execute some_procedure | sqlplus username/[email protected] 

intentarlo.

+0

Funciona muy bien. ¡Gracias! – JosephStyons

+1

¿Qué hace el símbolo @ antes del eco en este caso? – ivanatpr

+4

@IvanG; Para los archivos por lotes de Windows, el símbolo @ antes de un comando evita que el comando se repita en la consola. Es útil en situaciones en las que no desea desactivar el eco, pero no desea ver el comando repetido en la pantalla. En este caso, es necesario para que lo que se canaliza al comando sqlplus sea el SQL que queremos ejecutar, no el texto del comando. –

13

¿Has probado algo como esto?

sqlplus username/[email protected] < "EXECUTE some_proc /" 

parece que en UNIX que puede hacer:

sqlplus username/[email protected] <<EOF 
EXECUTE some_proc; 
EXIT; 
EOF 

pero no estoy seguro de lo que sería el equivalente de ventanas que.

+0

Nota, en UNIX (y, probablemente, ventanas), que realmente shouldn' Siempre la sintaxis de nombre de usuario/contraseña, que expondrá su contraseña a cada usuario en el sistema. Use autenticación externa si lo necesita. –

+1
+2

esa línea de comando será visible para otros usuarios de os con (por ejemplo) 'ps -ef', si tiene que incluir nombre de usuario y contraseña, mejor para ejecutar" sqlplus/nolog << EOF "y tener la primera línea sea" connect username /contraseña". No es la solución ideal, pero es mejor porque al menos no expone el nombre de usuario y la contraseña de texto claro en la salida de 'ps -ef' – spencer7593

5

sqlplus usuario/contraseña @ sid < sqlfile.sql

también trabajará desde la línea de comandos de DOS. En este caso, el archivo sqlfile.sql contiene el SQL que desea ejecutar.

-6

Esto es cómo he resuelto el problema:

<target name="executeSQLScript"> 
    <exec executable="sqlplus" failonerror="true" errorproperty="exit.status"> 
     <arg value="${dbUser}/${dbPass}@<DBHOST>:<DBPORT>/<SID>"/> 
     <arg value="@${basedir}/db/scripttoexecute.sql"/> 
    </exec> 
</target> 
+4

Describa su respuesta más específicamente dónde instalar esto y cómo solucionará el error, etc. – Ravimallya

8

Para UNIX (AIX):

export ORACLE_HOME=/oracleClient/app/oracle/product/version 
export DBUSER=fooUser 
export DBPASSWD=fooPW 
export DBNAME=fooSchema 

echo "select * from someTable;" | $ORACLE_HOME/bin/sqlplus $DBUSER/[email protected]$DBNAME 
-1
@find /v "@" < %0 | sqlplus -s scott/[email protected] & goto :eof 

select sysdate from dual; 
+1

Agregue más detalles a su respuesta. – maxshuty

Cuestiones relacionadas