#1 Fri 26 June 2015 17:08
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
trigger qui boucle
Bonjour.
Sous PostgreSQL j'ai créé un trigger qui permet lors de la modification d'un objet, de faire un update de tous les objets (dans la même table) ayant le même numéro de dossier.
CREATE TRIGGER t_conformite_up_alerte
BEFORE INSERT OR UPDATE
ON sig_conformite
FOR EACH ROW
EXECUTE PROCEDURE conformite_up_alerte();
J'ai donc une ligne dans mon trigger qui ressemble à ça :
...
update sig_conformite set alerte_date = 1 where date_conformite <NEW.date_conformite and nom_dossier = NEW.nom_dossier;
...
Du coup, puisque j'ai un update, le trigger va s'appeler lui même pour chacun des objets concernés par mes critères jusqu'à ce qu'il trouve un critère qui lui permette de sortir.... ou pas !
Dans mon cas le trigger fonctionne, mais n'y aurait-il pas un moyen de bloquer la possibilité de s'appeler lui même ?
Merci par avance de vos retours.
JP
Hors ligne
#2 Fri 26 June 2015 19:03
Re: trigger qui boucle
Bonjour,
Tu ne devrais pas faire une RULES plutôt qu'un trigger et une fonction si ce n'est que pour modifier la requête ?
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#3 Mon 29 June 2015 10:35
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
Re: trigger qui boucle
Bonjour Yves.
Je n'ai jamais pratiqué les RULES, je me plonge dans la doc pour voir si ça répond à mes soucis.
merci
JP
Hors ligne
#4 Mon 29 June 2015 10:55
Re: trigger qui boucle
Bonjour,
En fait ca va dépendre ce qu'il y a autours de la requête que tu as indiquée plus haut. Si elle est unique cela veut dire que tu peux modifier ta requête initiale (envoyée) à la volée par celle que tu as citée. Sinon tu devras faire autrement.
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#5 Mon 29 June 2015 14:27
- damika
- Participant occasionnel
- Lieu: Bidart
- Date d'inscription: 3 Aug 2010
- Messages: 33
Re: trigger qui boucle
Bonjour,
Dans la définition du trigger peut être en minimisant la liste des colonnes qui déclenchent le trigger :
- UPDATE OF column_name1 [, column_name2 ... ] : dans IsiGéo toutes les colonnes définies modifiable sont mises à jour même si la valeur n'a pas changé
- ou en mettant une condition de déclenchement : WHEN ...
Dernière modification par damika (Mon 29 June 2015 14:31)
Hors ligne
#6 Mon 29 June 2015 16:45
- Martin Bocquet
- Participant occasionnel
- Date d'inscription: 4 Mar 2015
- Messages: 22
Re: trigger qui boucle
Bonjour,
Une autre possibilité est de modifier ta procédure pour enlever la ligne incriminée.
Ca pourra se faire via une commande de type :
Code:
SELECT ... FROM table WHERE id != NEW.id;
ou, en appliquant à ta requête :
Code:
update sig_conformite set alerte_date = 1 where id != NEW.id AND date_conformite = ...
A toi ensuite de faire ces traitements sur cette nouvelle table.
Dernière modification par Martin Bocquet (Mon 29 June 2015 16:45)
Hors ligne
#7 Thu 02 July 2015 16:10
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
Re: trigger qui boucle
Bonjour.
J'ai presque réussi à me dépatouiller avec mon problème.
J'ai testé les RULES mais je me suis rendu compte qu'elles avaient elles aussi tendance à se relancer en boucle avec le risque de ne pas en sortir (si on a oublié un test en cours de route ....)
J'ai donc joué sur la définition des colonnes qui déclenchent les triggers (UPDATE OF XXX) , ajouté des tests, distingué les triggers en insert et ceux en update, et enfin bloqué le déclenchement de certains triggers (disable /enable) lors d'un INSERT.
Merci donc pour vos suggestions qui m'ont bien inspiré.
Cordialement
JP
Hors ligne