Bonjour à tous
Dans la plupart de mes tables, j'ai un champ DATE_MODIFqui indique la date et heure de la modification de la ligne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part DATE_MODIF TIMESTAMP DEFAULT Current_Timestamp NOT NULL
Pour que la modification dans la date soit systématique, je place un trigger qui place la date du jour : facile
Or ce n'est pas toujours le cas en ayant à fournir une autre date pour la modification ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 CREATE OR ALTER TRIGGER B_personne_bu0 FOR B_personne ACTIVE BEFORE UPDATE POSITION 0 AS begin NEW.Date_Modif = CURRENT_TIMESTAMP; end
J'avais donc procédé comme ceci :
un update "standard" (la date de modification est la date/heure de la modif) en faisant :
1 -
et pour une date de modification fournit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 UPDATE OR INSERT INTO B_PERSONNE (ID_PERSONNE) VALUES (:Id) MATCHING (ID_PERSONNE);
2 -
et je pensais (naïvement, sans doute) qu'en mettant un trigger
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 UPDATE OR INSERT INTO B_PERSONNE (ID_PERSONNE, date_modif) VALUES (:Id, '1900-01-01') MATCHING (ID_PERSONNE);
que la valeur dans New.Date_Modif serait celle indiqué dans la requête. Que nenni
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE OR ALTER TRIGGER B_personne_bu0 FOR B_personne ACTIVE BEFORE UPDATE POSITION 0 AS begin IF (NEW.Date_Modif IS NULL) THEN NEW.Date_Modif = CURRENT_TIMESTAMP; end![]()
La requête 2 fonctionne : la date de modif devient le 01/01/1900
mais pour la requête 1 (où aucune date n'est fournit), la date_modif reste identique parce que la valeur dans New.Date_modif n'est pas NULL, mais bien la date déjà enregistrée.
Y-a-t-il moyen de faire ce genre de chose ?
ou il faut indiquer explicitement la date_Modif que l'on souhaite ?
Je suis sous Firebird 2.5
Cordialement
olivier
Partager