2009-09-23 11 views
13

Ich habe einige SQL-Skripts, die ich zu automatisieren versuche. In der Vergangenheit habe ich SQL * Plus verwendet und die sqlplus-Binärdatei manuell aus einem Bash-Skript aufgerufen.Wie führen Sie SQL innerhalb eines Bash-Skripts aus?

Ich versuche jedoch herauszufinden, ob es eine Möglichkeit gibt, eine Verbindung mit der DB herzustellen, und rufen Sie das Skript aus dem Bash-Skript ... so dass ich date einfügen und die Abfragen relativ zu einem ausführen können bestimmte Anzahl von Tagen in der Vergangenheit.

Antwort

19

Ich bin etwas verwirrt. Sie sollten sqlplus innerhalb des bash-Skripts aufrufen können. Dies kann sein, was Sie mit Ihrer ersten Aussage machen

Try Die Ausführung der folgenden in Ihrem Bash-Skript:

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

Wenn Sie Daten in der Lage sein wollen, gehen in Ihre Skripte können Sie es über SQLPlus tun, indem Argumente in das Skript übergeben:

Inhalt Datei-mit-sQL-1.sql

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

Dann ch ange der Bash-Skript sqlplus vorbei in dem Wert nennen

#!/bin/bash 

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

Wie Bash hat nicht in SQL-Datenbank-Konnektivität gebaut ... Sie müssen irgendeine Art von Drittanbieter-Tool verwenden.

+6

sqlplus _is_, dass "Drittanbieter-Tool" – michael

-3

Hier ist eine einfache Möglichkeit, die Ausführung von MySQL-Abfragen in der Bash

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

Die OP Oracle verwendet. –

+0

Dies ist kein Orakel. –

0

Vielleicht Shell können Sie Rohr SQL-Abfrage sqlplus. Es funktioniert für mysql:

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

Sie können auch eine Verwendung "hier Dokument", das Gleiche zu tun:

VARIABLE=SOMEVALUE 

sqlplus connectioninfo << HERE 
start file1.sql 
start file2.sql $VARIABLE 
quit 
HERE 
Verwandte Themen