Bonjour les amis, je peine depuis un long moment un trigger de mise à jour.
c'est la première fois que j'utilise les triggers . j'ai besoin de votre coups de main.

Ma préoccupation est de faire la mise à jour de mon stock après livraison de produit

le principe est:
- si l'unité de la quantité livrée est la même à l'unité de base qui se trouve dans produit alors pas de conversion
- sinon conversion

je l'ai fais avec un trigger ci-dessous mais le résultat donne null

Mes tables
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
51
52
53
54
55
56
57
58
59
60
61
62
CREATE TABLE produit(
   ProduitId INT AUTO_INCREMENT  NOT NULL,
   Produitlibelle VARCHAR(50) NOT NULL,
   ProduitReference VARCHAR(20) NOT NULL,
   ProduitCodebar VARCHAR(50) NOT NULL,
   ProduitCaracteristique VARCHAR(50),
   ProduitImage longblob,
   MarqueId INT NOT NULL,
   ModelId INT NOT NULL,
   TvaId INT NOT NULL,
   SousfamilleId INT NOT NULL,
   UniteId INT NOT NULL,
   StockinitialDate DATE,
   StockInitial DECIMAL(15,2),
   ProduitStockalerte DECIMAL(15,2),
   ModifieLe 			DATETIME 	NOT NULL,
   ModifiePar			VARCHAR(50) NOT NULL,
   PRIMARY KEY(ProduitId),
   UNIQUE(ProduitReference),
   FOREIGN KEY(MarqueId) REFERENCES marque(MarqueId) ON DELETE CASCADE ON UPDATE CASCADE,
   FOREIGN KEY(ModelId) REFERENCES modele(ModelId) ON DELETE CASCADE ON UPDATE CASCADE,
   FOREIGN KEY(TvaId) REFERENCES tva(TvaId) ON DELETE CASCADE ON UPDATE CASCADE,
   FOREIGN KEY(SousfamilleId) REFERENCES sousfamille(SousfamilleId) ON DELETE CASCADE ON UPDATE CASCADE,
   FOREIGN KEY(UniteId) REFERENCES unite(UniteId) ON DELETE CASCADE ON UPDATE CASCADE
);
 
CREATE TABLE lignelivraisonclient(
   livraisonclientId INT NOT NULL,
   lignelivraisonclientId INT AUTO_INCREMENT  NOT NULL,
   lignelivraisonclientQuantite DECIMAL(15,2) NOT NULL,
   lignelivraisonclientPrixvente DECIMAL(15,2) NOT NULL,
   lignelivraisonclientTva DECIMAL(5,2),
   ProduitId INT NOT NULL,
   UniteId INT NOT NULL,
   PRIMARY KEY(lignelivraisonclientId, livraisonclientId),
   FOREIGN KEY(UniteId) REFERENCES unite(UniteId) ON DELETE CASCADE ON UPDATE CASCADE,
   FOREIGN KEY(ProduitId) REFERENCES produit(ProduitId) ON DELETE CASCADE ON UPDATE CASCADE,
   FOREIGN KEY(livraisonclientId) REFERENCES livraisonclient(livraisonclientId) ON DELETE CASCADE ON UPDATE CASCADE
);
 
create table CONVERSION ( /* 1 bobine contient 125 mètres */
  UniteId_In INT NOT NULL,/* bobine */
  UniteId_Out INT NOT NULL,/* mètres */
  Con_Quante_In DECIMAL(5, 2) NOT NULL,/*1*/
  Con_Quante_Out DECIMAL(5, 2) NOT NULL,/*125*/
  ProduitId INT NOT NULL,
  CONSTRAINT CONVERSION_PK PRIMARY KEY(UniteId_In, UniteId_Out,ProduitId),
  CONSTRAINT UNITE_IN_FK FOREIGN KEY(UniteId_In) REFERENCES unite(UniteId),
  CONSTRAINT UNITE_OUT_FK FOREIGN KEY(UniteId_Out) REFERENCES unite(UniteId),
  CONSTRAINT PRODUIT_FK FOREIGN KEY(ProduitId) REFERENCES produit(ProduitId) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB;
 
 
CREATE TABLE stock(
   StockId INT NOT NULL AUTO_INCREMENT,
   ProduitId INT NOT NULL,
   StockQuantite DECIMAL(15,2),
   ModifieLe 		DATETIME 	NOT NULL,
   ModifiePar			VARCHAR(50) NOT NULL,
   PRIMARY KEY(StockId, ProduitId),
   FOREIGN KEY(ProduitId) REFERENCES produit(ProduitId) ON DELETE CASCADE ON UPDATE CASCADE
);
mon trigger
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
DELIMITER //
CREATE TRIGGER insert_lignelivraisonclient AFTER INSERT ON lignelivraisonclient
FOR EACH ROW
BEGIN
	/* DECLARE les variables */
	DECLARE stock_Quantite decimal(15,2);
	DECLARE Unite_livree int;
	DECLARE Unite_base int;
	DECLARE coefficient_Unite_produit decimal(15,2);
 
	/* Recuperer les valeurs */
	select lignelivraisonclientQuantite, UniteId into stock_Quantite, Unite_livree from lignelivraisonclient where lignelivraisonclientId=NEW.lignelivraisonclientId;
    select distinct p.UniteId into Unite_base from produit p  where p.ProduitId=NEW.ProduitId;
 
    /* Mettre à jour les valeurs */
    if (Unite_livree <> Unite_base) then
    begin
		select Con_Quante_Out into coefficient_Unite_produit from conversion c where ProduitId=NEW.ProduitId and c.UniteId_In =(select u.UniteId from unite u where u.UniteId=Unite_livree);
		UPDATE stock SET StockQuantite = StockQuantite - (stock_Quantite*coefficient_Unite_produit) WHERE ProduitId = NEW.ProduitId;
    end;
    else
    begin
		UPDATE stock SET StockQuantite = StockQuantite - stock_Quantite WHERE ProduitId = NEW.ProduitId;
    end;
    end if;
END
//
DELIMITER ;
je vous remercie d'avance