[shell][scripting][SGBD] lancer des requettes SQL via scripts....

lancer des requettes SQL via scripts.... [shell][scripting][SGBD] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 28-01-2004 à 12:22:26    

bonjour suites aux conseil donnés dans la section programmation/SGBD je cros-post ici puisque peut etre certains d'entre vous pourront me conseiller...
 
http://forum.hardware.fr/forum2.ph [...] warefr.inc
 
faut pas crossposter d'habitude mais j'ai eut pour seule reponse voir sur OSA, et ça fait pas mal de jours que la question est posée....  
 
alors moderateurs soyez comprehenssifs...merci  :jap:


---------------
If everything else failed then read the instructions
Reply

Marsh Posté le 28-01-2004 à 12:22:26   

Reply

Marsh Posté le 28-01-2004 à 13:46:52    

tu devrait essayer de faire ça :
duplique ton script SQL vers un équivalent. ex : mop.sql devient mop.sql.tmp
tu fais un sed pour remplacer tes occurences de $var1 par $1, $var2 par $2 etc
 
et tu passes le tmp en paramètres au lieu de l'original
 
contrainte : ton nombre de var est limité :(

Reply

Marsh Posté le 28-01-2004 à 13:50:44    

Hmm, c'est vraiment pas beau tout ça. Le mieux ça serait de faire un script perl.
Il existe un module perl pour se connecter aux bases mysql.
Pour postgre, je suppose qu'il doit y en avoir un aussi.

Reply

Marsh Posté le 28-01-2004 à 13:52:09    

ouaip, pour postgres y'a un module et il est très simple à utiliser!

Reply

Marsh Posté le 28-01-2004 à 13:56:04    

comment ça ?
 
toto.sh --->
 
...
...
toiiii.sql foo
....
 
truc comme ça ?
ou foo est $1 dans le fichier .sql ???


---------------
If everything else failed then read the instructions
Reply

Marsh Posté le 28-01-2004 à 14:04:37    

bon ben ça marche pas de toute façon...
 
la seule autre solution provisoire trouvée est de faire  

$ psql  -v rr1=tutu -qf toto.sql test
tutu

ou rr1 est le nom de variable...  
 
mais là encore ça resoud pas le probleme c'est qu'une autre façon toute aussi barbare et malpropre de faire...


---------------
If everything else failed then read the instructions
Reply

Marsh Posté le 28-01-2004 à 14:04:56    

ArSuniK a écrit :

Hmm, c'est vraiment pas beau tout ça. Le mieux ça serait de faire un script perl.
Il existe un module perl pour se connecter aux bases mysql.
Pour postgre, je suppose qu'il doit y en avoir un aussi.
 


 
je fais pas de perl :D
mais c'est clair que ce que j'ai prposé c'est ue solution de goret :D

Reply

Marsh Posté le 28-01-2004 à 14:08:22    

ArSuniK a écrit :

Hmm, c'est vraiment pas beau tout ça. Le mieux ça serait de faire un script perl.
Il existe un module perl pour se connecter aux bases mysql.
Pour postgre, je suppose qu'il doit y en avoir un aussi.
 


 
certes mais perl je m'en tapes... j'ai dit shell (du moins pour cette question)...
 
 :pt1cable:  
 
je ne peux pas utiliser perl il faut que n'importe qui (même debutants donc shell obligatoirement) puisse comprendre les liens entre les shells les sql et les fichiers generés ...
 
deplus j'ai jamais vu une production scriptée utiliser autrechose que du shell avec du SQL derierre...
 


---------------
If everything else failed then read the instructions
Reply

Marsh Posté le 28-01-2004 à 14:21:55    

exemple complet qui fonctionne
 


$ psql  -v rr1=tutu -qf toto.sql  test 2> toto.err 1> toto.lis
 
/c/SECURITE/db_tests
$ ll
total 2.0k
-rw-r--r--    1 T unknown        28 Jan 28 14:00 toto.sql
-rw-r--r--    1 T unknown         5 Jan 28  2004 toto.lis
-rw-r--r--    1 T unknown         0 Jan 28  2004 toto.err


 
mon fichier lis contient bien la chaine généré par la variable rr1
 
mais le principe est la  
 

  • un batch se lance et lance conditionnellement sur date sur fichier sur variable etc... des sql  
  • les historiques partent en fichier lis
  • les erreurs partent en fichier err
  • les codes retours sont parties des confitions testes par les batch (shell-scripts)
  • quand il est fini le suivant de la chaine de jobs et ainsi de suite en fonction des retours...


exemple


cas 1:
job1--->sql1--->sql2--->disons que sql1 echoue alors job4 se lance
cas 2:
job1--->sql1--->sql2--->disons que sql2 echoue alors job5 se lance
cas 3:
job1--->sql1--->sql2--->job2--->job3 quand tout se passe bien
et un mail est envoyé directement à qui de droit


 
d'où l'interet de trouver une solution efficace pour les passages de variables... et pour la rediraction des resultats...
 
toutes les solutions que j'utilise actuellement fonctionne je que je cherche c'est une façon plus propre....
tout en ne gardant que du standard et donc forcement shell et pl/sql ou SQL pur...


Message édité par francoisp le 28-01-2004 à 14:23:34

---------------
If everything else failed then read the instructions
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed