2009-03-12 7 views
38

Utilizzando SQL più, è possibile eseguire un sceneggiatura con l'operatore "@" dalla riga di comando, come in:Come posso emettere un singolo comando dalla riga di comando tramite sql plus?

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

ma è possibile eseguire solo un singolo comandocon una sintassi simile , senza un intero file di script separato? Come in:

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

Sono interessato a questo perché voglio scrivere un file batch che esegue semplicemente un comando, senza generare un gruppo di due linee file "sql".

risposta

59

sono in grado di eseguire una query SQL facendo una pipe con SQL * Plus:

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

Dare

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

una prova.

+0

Funziona alla grande. Grazie! – JosephStyons

+1

Che cosa fa in questo caso il simbolo @ prima dell'eco? – ivanatpr

+4

@ IvanG; Per i file batch di Windows, il simbolo @ prima di un comando annulla il comando dall'eco alla console. È utile in situazioni in cui non si desidera disattivare l'eco, ma non si vuole vedere il comando echeggiato sullo schermo. In questo caso è necessario in modo che ciò che viene inviato al comando sqlplus sia l'SQL che vogliamo eseguire, non il testo del comando. –

13

Hai provato qualcosa del genere?

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

bordo come UNIX si può fare:

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

ma non sono sicuro di quello che sarebbe l'equivalente di Windows di questo.

+0

nota, su UNIX (e probabilmente le finestre), è davvero shouldn' t mai la sintassi nome utente/password, che esporrà la tua password a tutti gli utenti del sistema. Utilizza l'autenticazione esterna se necessario. –

+1

Il simbolo <è anche una pipa in Windows. Bella idea, ma non funziona. – JosephStyons

+2

quella riga di comando sarà visibile ad altri utenti os con (eg) 'ps -ef', se devi includere username e password, meglio eseguire" sqlplus/nolog << EOF "e avere la prima riga essere" connect username /parola d'ordine". Non è la soluzione ideale, ma è meglio che almeno non esponga il nome utente e la password di testo chiaro in output da 'ps -ef' – spencer7593

5

utente sqlplus/password @ sid < sqlfile.sql

sarà anche lavorare da riga di comando DOS. In questo caso il file sqlfile.sql contiene l'SQL che desideri eseguire.

-6

Ecco come ho risolto il 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

Descrivi la tua risposta più specificatamente dove impostare questo e come risolverà l'errore, ecc. – Ravimallya

8

Per 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

Per favore aggiungi ulteriori dettagli come risposta. – maxshuty