Des fois, j'ai envie de me tirer une balle. Le problème est résolu et était tout bête.
Le trigger constituait une boucle puisque je faisais un else qui updatait location...
Bonjour,
Dans le cadre d'un projet estudiantin, je dois créer un trigger sur un update.
Voilà le trigger en question. Il doit empêcher la diminution de la colonne duree lors d'un update sur la table location.
Dans le cas contraire, il effectue l'update correctement.
CREATE OR REPLACE FUNCTION f_trigg3() RETURNS TRIGGER AS $$
DECLARE
duree_old_IJ location.duree%TYPE;
duree_new_IJ location.duree%TYPE;
un_idcli_IJ location.idcli%TYPE;
un_idlogt_IJ location.idlogt%TYPE;
BEGIN
duree_old_IJ := OLD.duree;
duree_new_IJ := NEW.duree;
un_idcli_IJ := NEW.idcli;
un_idlogt_IJ := NEW.idlogt;
IF( duree_old_IJ > duree_new_IJ ) THEN
RAISE EXCEPTION ' impossible de baisser la durée d une location';
ELSE
UPDATE location SET duree = duree_new_IJ WHERE idcli = un_idcli_IJ AND idlogt = un_idlogt_IJ;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- creation du trigger:
DROP TRIGGER trigg3 ON location;
CREATE TRIGGER trigg3
BEFORE UPDATE ON location
FOR EACH ROW EXECUTE PROCEDURE f_trigg3();
Lorsque j'exécute le fichier, la fonction et le trigger sont bien créer sans problème.
=> \i ./trigg3.sql
CREATE FUNCTION
DROP TRIGGER
CREATE TRIGGER
Mais quand je fais une requête update simple, j'obtiens une erreur en boucle.
=> update location set duree = 12 where idlogt = 1 and idcli = 2;
instruction SQL « UPDATE location SET duree = $1 WHERE idcli = $2 AND idlogt = $3 »
PL/pgSQL function "f_trigg3" line 15 at instruction SQL
instruction SQL « UPDATE location SET duree = $1 WHERE idcli = $2 AND idlogt = $3 »
PL/pgSQL function "f_trigg3" line 15 at instruction SQL
instruction SQL « UPDATE location SET duree = $1 WHERE idcli = $2 AND idlogt = $3 »
PL/pgSQL function "f_trigg3" line 15 at instruction SQL
...etc etc
Le trigger s'enclenche et devrait normalement effectuer l'update tout simplement puisque j'ai dans ma table
Donc je ne comprends pas où est l'erreur et ne peut donc la résoudre.
Merci par avance de votre précieuse aide.
Erreur lors de l'exécution d'un trigger
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.