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 :
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';
Ce script doit utiliser Mysql, et initialiser un fichier de log.

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.

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
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
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