Bonjour @ tous,
Je débute avec les triggers et j'ai un souci avec un cas particulier :
Je bosse sur 4 tables, sur un trigger BEFORE INSERT d'une de mes tables je dois aller récupérer des infos dans 2 autres tables pour les insérer.
Le problème c'est que je dois d'abord récupérer un critère dans une table (Affilies) et en fct de cette valeur je vais taper dans une table ou dans l'autre pour récupérer mes valeurs à inserer via mon trigger :
Mes 4 tables:
- Factures
- Affilies
- Aff_RIB
- Aff_MON
Je dois d'abord récupérer "Moyen_paiement" dans la table Affilies et en s'il vaut 1 je fait un select dans Aff_RIB, s'il vaut 2 je fais un select dans Aff_MON, et dans les deux cas j'insère les valeurs récupérer dans "Factures" (là ou j'ai mon trigger).
En gros donc quand je créé une facture (trigger insert dans "factures") pour un affilié je veux récupérer automatiquement les informations nécessaires au moyen de paiement (RIB ou Moneyteller), cette info est précisé dans la table Affilies dans le champ "Moyen_paiement".
Si Affilies.Moyen_paiement = 1 -> je prend les infos dans Aff_RIB et j'insère dans factures.
Si Affilies.Moyen_paiement vaut 2 -> je prend les infos dans Aff_RIB et j'insère dans factures.
Voici mon code (BEFORE INSERT ON Factures):
Mon problème c'est qu'a priori je ne rentre pas dans IF moyen = 1 ...
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 BEGIN DECLARE cur_rib_tit_adresse, cur_rib_banq_adresse TINYTEXT; DECLARE cur_rib_num, cur_rib_iban, cur_rib_bic VARCHAR(200); DECLARE moyen_paiement TINYINT(1); DECLARE cur_mp_rib CURSOR FOR SELECT UPPER(CONCAT(TIT_DOM,"\n", TIT_ADRESSE,"\n", TIT_CP,"\n", TIT_VILLE,"\n", TIT_PAYS)) as rib_tit_adresse, CONCAT(RIB_DOM,"\n", RIB_ADRESSE,"\n", RIB_CP,"\n", RIB_VILLE,"\n", RIB_PAYS) as rib_banq_adresse, RIB_NUM, IBAN, RIB_BIC FROM Affilies_RIB WHERE Affilies_RIB.ID_Sup = NEW.fac_ida; SELECT Moyen_paiement INTO moyen_paiement FROM Affilies WHERE Affilies.ID_Sup = NEW.fac_ida; IF moyen_paiement = 1 THEN BEGIN OPEN cur_mp_rib; FETCH cur_mp_rib INTO cur_rib_tit_adresse, cur_rib_banq_adresse, cur_rib_num, cur_rib_iban, cur_rib_bic; SET NEW.fac_rib_tit_adresse = cur_rib_tit_adresse, NEW.fac_rib_banq_adresse = cur_rib_banq_adresse, NEW.fac_rib_num = cur_rib_num, NEW.fac_rib_iban = cur_rib_iban, NEW.fac_rib_bic = cur_rib_bic; CLOSE cur_mp_rib; ELSE ... un autre curseur identique pour récupérer les infos dans Aff_MON ... END IF; END
Impossible de savoir si j'ai bien fait les choses, et si ma variable est bien remplie ... je passe toujours dans le ELSE dès que j'insère une ligne dans Factures ...
Quelqu'un voit d'où vient le problème ?
J'utilise des curseurs mais je ne sais pas si c'est la meilleure solution ?
bref, si vous avez des conseils je suis preneur !!
Je précise que le trigger passe bien et ne génère aucune erreur ...
Partager