Bonjour,
Je tente de développer un petit script shell qui exécutera un script sql, contenant 400 requêtes utilisant toutes une variable commune : @siren.
Exemple de requête :
Ce script doit utiliser Mysql, et initialiser un fichier de log.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 delete ca from cause_annulation ca join ligne_commande lc on lc.id = ca.fk_ligne_commande join entete_commande ec on ec.id = lc.fk_entete_commande join type_ligne_commande_version tcv on tcv.id = lc.fk_type_ligne_commande_version join type_ligne_commande tc on tc.id = tcv.fk_type_ligne_commande join migration_gcblo mg on mg.fk_entete_commande = ec.id where lc.code_offre = 'O00000000015' and mg.fk_operateur = (select id from operateur where operateur_siren = @siren) and mg.indicateur_migration_realisee = 1 and mg.indicateur_rejet = 0 and mg.code_operation = 'CSTR' and tc.code = 'GCFTTX_REG';
Mon problème est le suivant : Si j'appelle juste mysql avec un script contenant une requête sans paramètre, ça fonctionne, et la requête est bien écrite dans mon fichier de log.
Par contre, si je rajoute juste une initialisation de variable à l'exécution du script, je n'ai plus rien dans les logs, et la requête n'a pas tourné :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 #!/bin/sh echo Migration CSTR #------------------------------------------------# # -- VERIFICATION DEs PARAMETRES -- # #------------------------------------------------# echo "Nombre d'argument "$# if [ $# -ne 1 ]; then echo "ERREUR DANS LE NOMBRE DE PARAMETRES : Seul le SIREN est nécessaire" else echo "Le SIREN de l'opérateur à migrer est "$1 #------------------------------------------------# # -- ALIMENTATION DES VARIABLES -- # #------------------------------------------------# SIREN=$1 FIC_SQL=/opt/mysql/sql/CSTR SH_LOG=/opt/mysql/sql/CSTR/Logs echo $SIREN echo $FIC_SQL echo $SH_LOG #------------------------------------------------# # -- DECLARATION DES FICHIERS -- # #------------------------------------------------# # FICHIER DE TRACE FIC_TRACE=$SH_LOG/migration.trc # FICHIER DE SCRIPT SQL SCRIPT_SQL=$FIC_SQL/migration_cstr_gcblo1.sql #------------------------------------------------# # -- ON UTILISE MYSQL -- # #------------------------------------------------# touch $FIC_TRACE set -x mysql --user=pcol01update --password=pcol01update --host=localhost --database=pcol01 < $SCRIPT_SQL >> $FIC_TRACE fi exit 0
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 touch $FIC_TRACE set -x mysql --user=pcol01update --password=pcol01update --host=localhost --database=pcol01 -e "set @siren=$SIREN;"< $SCRIPT_SQL >> $FIC_TRACE
C'est la première fois que j'utilise du shell, j'en appelle donc à votre expérience.
Merci par avance
Partager