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.
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
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
Peut-être que vous pouvez diriger une requête SQL vers sqlplus. Cela fonctionne pour mysql:
echo "SELECT * FROM table" | mysql --user=username database
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/