Trigger sous MySQL + calcul de TIME
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 8O
Je m'explique, j'ai deux tables que voici :
Code:
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; |
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:
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// |
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'.
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:
Code:
Column 'TotalMois' cannot be null
Quelqu'un aurait-il la solution ???:help:
MERCI