Bonjour à tous,
J'ai un soucis avec les variables "_chep_compteur_palette" et "_chep_compteur_coiffe", j'ai l'impression qu'elles ne se chargent pas avec la donnée retournée par la requête.
2 tables :
`chepbox`
`chep_stock_bac_vide`
Mon objectif est de supprimer les données de la table `chep_stock_bac_vide` lorsque je supprime ces même données de la table `chepbox` avec des conditions.
Voici le code :
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 CREATE TRIGGER `before_delete_chepbox` BEFORE DELETE ON `chepbox` FOR EACH ROW BEGIN DECLARE _chep_compteur_palette INT DEFAULT 0; DECLARE _chep_compteur_coiffe INT DEFAULT 0; SET _chep_compteur_palette = "SELECT COUNT(`chep_ref_palette`) FROM `chepbox` WHERE OLD.`chep_ref_palette` AND OLD.`chep_cofor`"; SET _chep_compteur_coiffe = "SELECT COUNT(`chep_ref_coiffe`) FROM `chepbox` WHERE OLD.`chep_ref_coiffe` AND OLD.`chep_cofor`"; IF (_chep_compteur_palette = 1) AND (_chep_compteur_coiffe = 1) THEN BEGIN IF OLD.`chep_ref_bac` = 0 THEN DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_palette` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`; DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_coiffe` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`; ELSE DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_bac` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`; DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_palette` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`; DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_coiffe` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`; END IF; END; ELSE IF OLD.`chep_ref_bac` <> 0 THEN BEGIN DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_bac` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`; END; END IF; END IF; END
Pour information, le dernier bloc fonctionne très bien :
C'est le premier bloc qui me pose des difficultés, j'ai l'impression que les variables "_chep_compteur_palette" et "_chep_compteur_coiffe" ne s’alimente pas du résultat de la requête.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 ELSE IF OLD.`chep_ref_bac` <> 0 THEN BEGIN DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_bac` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`; END; END IF; END IF;
J'ai remplacer ceci :
par cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SET _chep_compteur_palette = "SELECT COUNT(`chep_ref_palette`) FROM `chepbox` WHERE OLD.`chep_ref_palette` AND OLD.`chep_cofor`"; SET _chep_compteur_coiffe = "SELECT COUNT(`chep_ref_coiffe`) FROM `chepbox` WHERE OLD.`chep_ref_coiffe` AND OLD.`chep_cofor`";
Pas mieux au niveau du résultat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT COUNT(`chep_ref_palette`) INTO _chep_compteur_palette FROM `chepbox` WHERE OLD.`chep_ref_palette` AND OLD.`chep_cofor`; SELECT COUNT(`chep_ref_coiffe`) INTO _chep_compteur_coiffe FROM `chepbox` WHERE OLD.`chep_ref_coiffe` AND OLD.`chep_cofor`;
Dans PhpMyAdmin, les requêtes correspondantes aux données restante dans la table `chepbox` retournent le bon résultat soit "palette =1" et "coiffe =1" :
Mais lors de la suppression des données de la table `chepbox`, les données correspondantes restent dans la table `chep_stock_bac_vide`.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT COUNT(`chep_ref_palette`) AS palette FROM `chepbox` WHERE `chep_ref_palette`="C60" AND `chep_cofor`="A00ER"; SELECT COUNT(`chep_ref_coiffe`) AS coiffe FROM `chepbox` WHERE `chep_ref_palette`="C61" AND OLD.`chep_cofor`="A00ER";
Qu'est ce qui ne va pas ?
Merci d'avance pour votre aide précieuse.
PS : en injectant la valeur directement dans la varaiable, cela fonctionne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SET @_chep_compteur_palette := 1; SET @_chep_compteur_coiffe := 1;
La question c'est pourquoi ces 2 lignes ci-dessous ne renvoi pas 1 alors qu'en ligne de cde cela fonctionne ?
SOLUTION :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 "SELECT COUNT(`chep_ref_palette`) FROM `chepbox` WHERE OLD.`chep_ref_palette` AND OLD.`chep_cofor`" "SELECT COUNT(`chep_ref_coiffe`) FROM `chepbox` WHERE OLD.`chep_ref_coiffe` AND OLD.`chep_cofor`";
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SET @_chep_compteur_palette := (SELECT COUNT(`chep_ref_palette`) FROM `chepbox` WHERE `chep_ref_palette` = OLD.`chep_ref_palette` AND `chep_cofor` = OLD.`chep_cofor`); SET @_chep_compteur_coiffe := (SELECT COUNT(`chep_ref_coiffe`) FROM `chepbox` WHERE `chep_ref_coiffe` = OLD.`chep_ref_coiffe` AND `chep_cofor` = OLD.`chep_cofor`);
Partager