IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

fonction trigger n'enregistre pas la valeur calculée


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6
    Par défaut fonction trigger n'enregistre pas la valeur calculée
    Bonjur à tous;

    Je n'ai pas trouvé de réponse aussi j'espère ne pas faire de doublon avec d'autres fils de discussions.

    La fonction trigger est appelée par un trigger et le tout semble bien fonctionner, mis à part que la valeur que je veux voir modifiée ne l'est pas .

    Voici la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CREATE OR REPLACE FUNCTION "BDR".lancer_setcumul()
      RETURNS trigger AS
    $BODY$
    	BEGIN
    		-- UPDATE "BDR"."RELEVES_PT" SET NEW."CUMULD" = setcumul("ROUTE", "PRD", "ABD");
    		NEW."CUMULD" := "BDR".setcumul(NEW."ROUTE", NEW."PRD", NEW."ABD");
    		RAISE NOTICE 'Pour route=%, prd=%, abd=%, cumul=%', NEW."ROUTE", NEW."PRD", NEW."ABD", NEW."CUMULD";
    	RETURN NEW;
    	END;
    $BODY$
      LANGUAGE 'plpgsql' VOLATILE
      COST 100;
    ALTER FUNCTION "BDR".lancer_setcumul() OWNER TO postgres;
    La fonction setcumul() retourne systématiquement une valeur de type integer comme le confirme son en-tête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CREATE OR REPLACE FUNCTION "BDR".setcumul(IN text, IN integer, IN integer, OUT integer)
      RETURNS integer AS ...
    J'ai tenté de placer une requête de type INSERT INTO mais j'ai droit à un plantage et des logs de 10M chacun à cause d'une boucle infinie que je maitrise pas

    Auriez-vous une suggestion ?

  2. #2
    say
    say est déconnecté
    Membre Expert
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Par défaut
    Citation Envoyé par Capitaine Nemo Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CREATE OR REPLACE FUNCTION "BDR".lancer_setcumul()
      RETURNS trigger AS
    $BODY$
    	BEGIN
    		-- UPDATE "BDR"."RELEVES_PT" SET NEW."CUMULD" = setcumul("ROUTE", "PRD", "ABD");
    		NEW."CUMULD" := "BDR".setcumul(NEW."ROUTE", NEW."PRD", NEW."ABD");
    		RAISE NOTICE 'Pour route=%, prd=%, abd=%, cumul=%', NEW."ROUTE", NEW."PRD", NEW."ABD", NEW."CUMULD";
    	RETURN NEW;
    	END;
    $BODY$
      LANGUAGE 'plpgsql' VOLATILE
      COST 100;
    ALTER FUNCTION "BDR".lancer_setcumul() OWNER TO postgres;
    bon je suis au top sur les triggers..mais je pense que le problème c'est ton NEW."CUMULD". CUMUL n'est pas saisi j'imagine donc je pense que tu devrais avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE "BDR"."RELEVES_PT" SET "CUMULD" = "BDR".setcumul(NEW."ROUTE", NEW."PRD", NEW."ABD");

    P.S: tu devrais éviter les majuscules dans les noms de champ...c illisible après

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6
    Par défaut
    Merci pour ta suggestion. J'ai testé mais j'ai eu droit à cela:

    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
     
    2008-04-24 16:18:46 CEST ERREUR:  dépassement de limite (en profondeur) de la pile
    2008-04-24 16:18:46 CEST ASTUCE :  Augmenter le paramètre « max_stack_depth » après vous être assuré que la
    	limite de profondeur de la pile de la plateforme est adéquate.
    2008-04-24 16:18:46 CEST CONTEXTE :  instruction SQL « SELECT  "CUMULD" FROM "BDR"."BORNAGE" b WHERE ( $1  = b."ROUTE" AND b."PRD" =  $2 ) »
    	PL/pgSQL function "setcumul" line 2 at assignment
    	instruction SQL « UPDATE "BDR"."RELEVES_PT" SET "CUMULD" = "BDR".setcumul( $1 ,  $2 ,  $3 ) »
    	PL/pgSQL function "lancer_setcumul" line 3 at SQL statement
    	instruction SQL « UPDATE "BDR"."RELEVES_PT" SET "CUMULD" = "BDR".setcumul( $1 ,  $2 ,  $3 ) »
    	PL/pgSQL function "lancer_setcumul" line 3 at SQL statement
    	instruction SQL « UPDATE "BDR"."RELEVES_PT" SET "CUMULD" = "BDR".setcumul( $1 ,  $2 ,  $3 ) »
    	PL/pgSQL function "lancer_setcumul" line 3 at SQL statement
    ...
    [message tronqué, lignes répétitives]
    ...
    2008-04-24 16:18:46 CEST INSTRUCTION :  UPDATE "BDR"."RELEVES_PT" SET "ABD"='810'::integer WHERE "INDEX" = '4680'::integer
    Je sèche par manque de documentation claire, je comprends qu'il y a une boucle infinie dû au trigger appelé lors de la modif de l'UPDATE. Voilà pourquoi j'ai cru bon d'utiliser la syntaxe NEW."cumuld" := etc.

    J'ai juste ?

Discussions similaires

  1. [XL-2007] Fonction Split ne reconnait pas les valeurs
    Par beabourbon dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/04/2013, 17h32
  2. Pas de valeur calculée de sortie dans la S-Function
    Par celtic29 dans le forum Simulink
    Réponses: 1
    Dernier message: 19/07/2012, 10h28
  3. Réponses: 7
    Dernier message: 22/04/2010, 15h45
  4. fonction qui ne retourne pas de valeur
    Par 241987 dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 16/07/2009, 08h41
  5. [MySQL] Pourquoi ma base n'enregistre pas une valeur
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/06/2009, 21h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo