Bonjour,

je suis en train de travailler sur la conception d'une base de données qui représente le contenu d'un stock d’ingrédients et sa consommation :

J'ai créé toutes les tables et vues nécessaires et deux triggers :

Table Ingredient : objet, categorie
Table Conso : consoID, surnom, objet, quantite
Table Stock : objet, quantite
Table Courses : objet

Le premier trigger sert à gérer la diminution des stocks : il est normal que lorsqu'un ingrédient est consommé, il faille le retirer des stocks. Ce trigger se déclenchera sur une insertion dans la table Conso.
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 testTrigger BEFORE INSERT ON Conso FOR EACH ROW
BEGIN
DECLARE qtConso integer;
DECLARE prodConso varchar(50);
DECLARE restant integer;
DECLARE reste integer;
SET qtConso = NEW.quantite;
SET prodConso = NEW.objet;
SELECT quantite INTO restant FROM Stock WHERE objet = prodConso;
SET reste = restant - qtConso;
IF reste<0 THEN
SET NEW.quantite = restant;
UPDATE Stock SET quantite = 0 WHERE objet = prodConso;
ELSE
UPDATE Stock SET quantite = reste WHERE objet = prodConso;
END IF
END
=> Celui-là marche bien.

Le deuxième trigger ajoutera dans la table "Courses" les ingrédients lorsque leur stock atteindra 0. Dans ce cas :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
CREATE DEFINER=`root`@`localhost` TRIGGER `stock_AUPD` AFTER UPDATE ON `stock` REFERENCING 
NEW ROW AS new 
FOR EACH ROW
WHEN ((SELECT quantite FROM stock WHERE objet = new.objet) <= 0 )
INSERT INTO `courses`VALUES(new.objet)
ET VOILA , pourriez-vous jeter un coup d'œil pour des rectifications à faire concernant le deuxième et le premier trigger ?