Bonjour,

je pense avoir un souci avec un trigger.
En résumé, j'ai une table contact avec un téléphone, un email et une date de mise à jour pour ces 2 champs.

Mon trigger appelle ( en after) une fonction plpgsql qui compare les valeurs NEW et OLD pour vérifier si il y a besoin d'archiver l'ancienne valeur avant remplacement.
Quand ceci est fait, il fait un update de la date de mise à jour.

Si je ne fais pas l'update de la date, tout marche bien. Si je le fais, j'ai ce message :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
NOTICE:  Modification de tel1
NOTICE:  Validation de l enregistrement
CONTEXT:  SQL statement "UPDATE abadr SET datestoptel1=now() WHERE idadr= $1 "
PL/pgSQL function "datemajabadr" line 17 at SQL statement
NOTICE:  Modification de tel1
NOTICE:  Mise à jours de l enregistrement

Le code de la fonction est :
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
 
CREATE OR REPLACE FUNCTION archivageAbadr() RETURNS TRIGGER AS $$
DECLARE
	utilisateur TEXT;
	isModified BOOL;
BEGIN
	utilisateur := 'herve'
	isModified := false;
 
 
	-- Téléphone 1
	IF (OLD.tel1!=NEW.tel1 OR OLD.stoptel1!=NEW.stoptel1 )
	THEN
		DELETE FROM abadrhisto WHERE idadr=OLD.idadr AND donnee='tel1';
    	INSERT INTO abadrhisto (idadr,donnee,valeur,date,par) SELECT OLD.idadr,'tel1',OLD.tel1 || '/' || OLD.stoptel1 || '/' || OLD.datestoptel1, now(),utilisateur FROM abadr where idadr=OLD.idadr;
		UPDATE abadr SET datestoptel1=now() WHERE idadr=OLD.idadr;
		RAISE NOTICE 'Modification de tel1';
	END IF;
	RETURN NEW;
END;
$$ LANGUAGE plpgsql;
Le trigger est définie ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
CREATE TRIGGER tarchivageAbadr BEFORE UPDATE ON abadr 
	FOR EACH ROW EXECUTE PROCEDURE archivageAbadr();
En gros, je me demande si le fais de faire un update sur la table en cours ne redéclenche pas le trigger.

Est ce ma façon de modifier la valeur de la ligne qui est mauvaise ? J'ai essayé NEW.champ:=now() mais pas de résultat....

Si quelqu'un a une idée, je le remercie d'avance.