2009-09-23 25 views
13

Ho alcuni script SQL che sto cercando di automatizzare. In passato ho usato SQL * Plus e chiamato manualmente il binario sqlplus, da uno script bash.Come si esegue SQL da uno script bash?

Comunque, sto cercando di capire se c'è un modo per connettersi al DB, e chiamare lo script all'interno dello script bash ... in modo che posso inserire date ed effettuare le query eseguite relativamente ad un un certo numero di giorni in passato.

risposta

19

Sono un po 'confuso. Dovresti essere in grado di chiamare sqlplus dallo script di bash. Questo può essere quello che stavi facendo con il vostro prima dichiarazione

Prova eseguendo il seguente all'interno del tuo script bash:

#!/bin/bash   
echo Start Executing SQL commands 
sqlplus <user>/<password> @file-with-sql-1.sql 
sqlplus <user>/<password> @file-with-sql-2.sql 

Se si vuole essere in grado di passare i dati negli script è possibile farlo tramite SQLPlus da passare argomenti nello script:

Contenuto del di file-con-sql-1.SQL

select * from users where username='&1'; 

Poi ch ange lo script bash per chiamare sqlplus passando il valore

#!/bin/bash 

MY_USER=bob 
sqlplus <user>/<password> @file-with-sql-1.sql $MY_USER 
-4

Come Bash non sono dotati di connettività di database SQL ... è necessario utilizzare una sorta di strumento di terze parti.

+6

sqlplus _is_ che "strumento di terze parti" – michael

-3

Ecco un modo semplice di esecuzione di query MySQL nella shell bash

mysql -u [database_username] -p [database_password] -D [database_name] -e "SELECT * FROM [table_name]" 
+3

L'OP sta usando Oracle. –

+0

Questo non è un oracolo. –

0

Forse è possibile interrogare pipe SQL per sqlplus. Si lavora per mysql:

echo "SELECT * FROM table" | mysql --user=username database 
8

È inoltre possibile utilizzare un "here document" per fare la stessa cosa:

VARIABLE=SOMEVALUE 

sqlplus connectioninfo << HERE 
start file1.sql 
start file2.sql $VARIABLE 
quit 
HERE 
Problemi correlati