Bnjr;
j'aimerais créer un 'trigger before insert' dans lequel je récupère par un select les titres de congés d'un fonctionnaire de ma table 'titrcng' , je veux par la suite comparer la nouvelle ligne à insérer avec toutes les lignes obtenues par le select , en fait , je veux vérifier que le titre de congé à insérer ne chevauche pas avec les titres du même fonctionnaire qui sont déjà dans la base de données , pour cela j'ai créé le trigger suivant :
le trigger est effectivement créé , les triggers sont activés (SET GLOBAL event_scheduler=ON), mais quand j'insère une nouvelle ligne qui ne respect pas la condition évoquée dans le trigger , la ligne est quand même insérée ????
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 delimiter // CREATE TRIGGER NON_OVERLAP BEFORE INSERT ON `titrcng` FOR EACH ROW BEGIN DECLARE done INT DEFAULT 0; DECLARE DATDEB DATE; DECLARE DATFIN DATE ; DECLARE OVERLAP_CURSOR CURSOR FOR SELECT 'DatDeb' as DATDEB ,'DatFin' as DATFIN FROM titrcng WHERE 'NSS'=NEW.NSS ; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN OVERLAP_CURSOR; read_loop:LOOP FETCH OVERLAP_CURSOR INTO DATDEB ,DATFIN ; IF done THEN LEAVE read_loop; END IF ; IF (DATDEB <= NEW.DatFin AND NEW.DatDeb <= DATFIN ) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = `Les congés ne doivent pas se chevaucher`; END IF; END LOOP; CLOSE OVERLAP_CURSOR; END// delimiter ;
quelq'un peut m'aider svp?
Partager