Bonjour à tous

Dans la plupart de mes tables, j'ai un champ DATE_MODIF
Code : Sélectionner tout - Visualiser dans une fenêtre à part
DATE_MODIF          TIMESTAMP DEFAULT Current_Timestamp NOT NULL
qui indique la date et heure de la modification de la ligne.

Pour que la modification dans la date soit systématique, je place un trigger qui place la date du jour : facile
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
Or ce n'est pas toujours le cas en ayant à fournir une autre date pour la modification ...
J'avais donc procédé comme ceci :
un update "standard" (la date de modification est la date/heure de la modif) en faisant :
1 -
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);
et pour une date de modification fournit :
2 -
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);
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
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
que la valeur dans New.Date_Modif serait celle indiqué dans la requête. Que nenni
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