web-dev-qa-db-fra.com

Comment exécutez-vous SQL à partir d'un script bash?

J'ai quelques scripts SQL que j'essaie d'automatiser. Dans le passé, j’utilisais SQL * Plus et appelais manuellement le binaire sqlplus à partir d’un script bash.

Cependant, j'essaie de déterminer s'il existe un moyen de se connecter à la base de données et d'appeler le script à l'intérieur du script bash ... afin de pouvoir insérer date et faire en sorte que les requêtes s'exécutent relativement à un certain nombre de jours. autrefois.

13
Aaron

Je suis un peu confus. Vous devriez pouvoir appeler sqlplus depuis le script bash. C'est peut-être ce que vous faisiez avec votre première déclaration

Essayez d’exécuter ce qui suit dans votre 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

Si vous voulez pouvoir transmettre des données dans vos scripts, vous pouvez le faire via SQLPlus en transmettant des arguments dans le script:

Contenu de fichier-avec-sql-1.sql

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

Puis changez le script bash pour appeler sqlplus en transmettant la valeur

#!/bin/bash

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

Vous pouvez également utiliser un "ici document" pour faire la même chose:

VARIABLE=SOMEVALUE

sqlplus connectioninfo << HERE
start file1.sql
start file2.sql $VARIABLE
quit
HERE
8
xdhmoore

Peut-être que vous pouvez diriger une requête SQL vers sqlplus. Cela fonctionne pour mysql:

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

J'ai utilisé le projet jdbcsql sur Sourceforge.

Sur les systèmes * nix, cela créera un flux de résultats csv au format standard:

Java -Djava.security.egd=file///dev/urandom -jar jdbcsql.jar -d oracledb_SID -h $Host -p 1521 -U some_username -m Oracle -P "$PW" -f Excel -s "," "$1"

Notez que l'ajout du -Djava.security.egd=file///dev/urandom augmente considérablement les performances

Les commandes Windows sont similaires: voir http://jdbcsql.sourceforge.net/

0
Rondo