Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur lors de l'exécution d'un trigger

Sous postgresql

Sujet résolu
    4 janvier 2012 à 9:33:40

    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

    => select * from location;
     idlogt | idcli | duree 
    --------+-------+-------
          1 |     1 |    24
          1 |     2 |     6
          2 |     3 |    12


    Donc je ne comprends pas où est l'erreur et ne peut donc la résoudre.
    Merci par avance de votre précieuse aide.
    • Partager sur Facebook
    • Partager sur Twitter

    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.
    • Editeur
    • Markdown