Bonjour à tous,
Je travaille avec une base MySQL et je me suis dit, tiens pourquoi ne pas faire un trigger pour calculer les valeurs de type temps mais ca coince, mon trigger ne me met pas d'erreur lors de l'execution mais le calcul ne se fait pas
Je m'explique, j'ai deux tables que voici :
Je fais un trigger me permettant de mettre à jour TotalMois (Table Mois) en aditionnant tout les totalDay correspondant (TotalDay table Jour) lors d'un insert dans la table Jour, ce qui donne :
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 CREATE TABLE `Jour` ( `Id` int(10) unsigned NOT NULL, `Mois` varchar(20) NOT NULL, `Annee` int(10) unsigned NOT NULL default '0', `Jour` int(10) unsigned NOT NULL, `TotalDay` time default NULL, PRIMARY KEY (`Id`,`Mois`,`Annee`,`Jour`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE `Mois` ( `Id` int(10) unsigned NOT NULL, `Mois` varchar(20) NOT NULL, `Annee` int(10) unsigned NOT NULL default '0', `TotalMois` time default NULL, PRIMARY KEY (`Id`,`Mois`,`Annee`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Mais le probléme c'est que le calcul ne se fait pas, j'ai toujours '00:00:00' alors que je devrais avoir un truc du genre '20:20:54'.
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 DELIMITER // DROP TRIGGER Ajout// CREATE TRIGGER Ajout BEFORE INSERT ON Jour FOR EACH ROW BEGIN DECLARE done BOOLEAN DEFAULT FALSE; DECLARE dMat,fMat,dAprem,fAprem,tDay,total TIME; DECLARE curs CURSOR FOR SELECT DATE_FORMAT(TotalDay,GET_FORMAT(TIME,'ISO')) AS TotalDay2 FROM Jour WHERE Id=NEW.Id AND Annee=NEW.Annee AND Mois=NEW.Mois; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE; SET total = TIME('00:00:00'); OPEN curs; curs_loop: LOOP FETCH curs INTO tDay; IF `done` THEN LEAVE curs_loop; END IF; SET total = TIME(total)+TIME(tDay); END LOOP curs_loop; INSERT INTO Mois (Id,Mois,Annee,TotalMois) VALUES (NEW.Id,NEW.Mois,NEW.Annee,total) ON DUPLICATE KEY UPDATE TotalMois=total; CLOSE curs; END//
J'ai essayé de convertir tout les temps en secondes puis de les additionner et de les reconvertir en TIME mais rien n'y fait.
En fait, en y regardant de plus prés il me met une erreur qui est celle-ci:
Quelqu'un aurait-il la solution ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part Column 'TotalMois' cannot be null
MERCI
Partager