Bonjour à tous,

Je bloque sur la création d'un trigger qui devrait utiliser les valeurs de 2 tables qui sont reliées.

Table 1 : llx_contrat as c (rowid, ref, fk_soc)
Table 2 : llx_societe as s (rowid, nom)
Les 2 tables sont reliées de cette façon: c.fk_soc = s.rowid

Mon trigger devrait insérer (après un insert dans la table llx_contrat) les données suivantes dans une 3ème table: llx_custom_reservation_def as r (rowid, tiers, ref)
r.rowid = c.rowid
r.tiers = s.nom
r.ref = c.ref

Voici ce que j'ai essayé mais qui ne fonctionne pas.


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
 
 
 
 
CREATE TRIGGER `after_insert_contrat` AFTER INSERT ON `llx_contrat`
 
FOR EACH ROW 
BEGIN
 
DECLARE cd varchar;
 
SET cd = (select s.nom from `llx_contrat` as c LEFT JOIN `llx_societe` as s ON s.rowid = c.fk_soc);
 
 
INSERT INTO llx_custom_reservation_def
(rowid, tiers, ref) VALUES (NEW.rowid, cd, NEW.ref)
 
 END
J'ai essayé ceci aussi mais toujours sans succès

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
CREATE TRIGGER `before_insert_contrat` BEFORE INSERT ON `llx_contrat` 
 
FOR EACH ROW 
BEGIN
 
 
INSERT INTO llx_custom_reservation_def (rowid, ref, tiers) 
SELECT NEW.rowid, NEW.ref, s.nom
FROM llx_societe WHERE s.rowid = NEW.fk_soc;
 
END


Ce trigger-ci fonctionne mais c'est la clé du fk_soc qui s'affiche dans mon champ tiers de la table llx_custom_reservation_def. Or j'aimerais que ce soit le nom de la société qui soit insérée

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
CREATE TRIGGER `after_insert_contrat` AFTER INSERT ON `llx_contrat`
 
 FOR EACH ROW INSERT INTO llx_custom_reservation_def
 (rowid, tiers, ref) VALUES (NEW.rowid, NEW.fk_soc, NEW.ref)

Quelqu'un pourrait me dire quelle est l'erreur? Je suppose que je ne peut pas procéder comme cela mais je ne parviens pas à comprendre comment je peux faire.
Merci par avance pour votre aide.