Bonjour.
J'ai un souci avec un trigger.
J'ai une table de dossiers, avec la possibilité de retrouver plusieurs fois un même dossier. L'objectif lors de la modification d'un dossier, est de faire un update de certains champs sur l'ensemble des dossiers ayant le même numéro.
J'ai donc un trigger qui se déclenche sur un update de champs nommés 'the_geom' ou 'libelle'.
Lorsque je lance un update avec la valeur de libelle = 'Conforme' , le trigger se déclenche bien, fait ce qu'il faut, mais par contre le NEW.libelle n'est pas remontée dans ma base, la valeur du champ reste en l'état (avec l'ancienne valeur).
exemple : j'ai un objet avec un identifiant 3121, un libelle de type 'Non conforme',une valeur à 0 dans l'attribut alerte date. Un deuxième dossier a le même numéro (nom_dossier). Je veux que les deux dossier aient une valeur alerte_date égale à 1 lorsque le 3121 bascule en conforme
update sig_conformite set libelle = 'Conforme' where ogc_fid = 3121;
Et c'est le cas ! Sauf qu'après l'update, le libelle du 3121 reste à 'Non conforme'
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| CREATE TRIGGER t_test_trigger
BEFORE UPDATE OF the_geom, libelle
ON sig_conformite
FOR EACH ROW
EXECUTE PROCEDURE test_trigger();
....
BEGIN
nb_dossier = 0;
nb_dossier = count(nom_dossier)from sig_conformite where nom_dossier = NEW.nom_dossier;
IF NEW.libelle = 'Conforme' THEN
NEW.alerte_date = 1;
raise notice 'nb dossiers :%', nb_dossier;
IF nb_dossier > 1 THEN
update sig_conformite set alerte_date = 1 where nom_dossier = NEW.nom_dossier;
END IF;
END IF;
return NEW;
.... |
En simplifiant le trigger je me suis rendu compte que c'est la ligne update sig_conformite set alerte_date = 1 where nom_dossier = NEW.nom_dossier qui met le bazar.
Je ne comprend pas pourquoi. J'ai supprimé tous les autres trigger (en cas d'interaction) mais le phénomène perdure. Quand je fais un raise notice sur NEW.libelle la valeur est bien 'Conforme', mais en final dans ma table, elle reste à 'Non conforme'.
J'ai adapté le trigger à une autre table prise au hasard dans ma base de test et le problème se répète.
Si quelqu'un à une idée sur la source du problème je suis preneur.
Cordialement
JP
Partager