Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/05/2011, 12h34   #1
Invité de passage
 
Inscription : mai 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 3
Points : 1
Points : 1
Par défaut trigger procedure probléme

Bonjour,

je suis débutant et je n'ai jamais fait de trigger/procedure, après avoir bien galéré pour comprendre et étant pris par le temps je sollicite votre aide

J'ai un trigger qui appel une procédure qui doit additionner 2 champs puis écrire dans un nouveau champs la nouvelle valeur à chaque insertion.

le problème c'est que la nouvelle valeur est toujours la même pour tout les tuple parce les valeurs utilisées son que sur le 1er tuple de la table.

ce que je voudrai c'est qu'il le fasse pour chaque tuple en question.

le code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
CREATE TRIGGER calc_h_fin
  BEFORE INSERT
  ON histo
  FOR EACH ROW
  EXECUTE PROCEDURE calc_h_fin();
 
 
 
CREATE OR REPLACE FUNCTION calc_h_fin()
  RETURNS TRIGGER AS
$BODY$
 
DECLARE 
val interval;
 
BEGIN
SELECT INTO val evenem_hdeb+evenem_retard FROM histo;
  NEW.h_fin_incident := val ;  
 
RETURN NEW;
END;
 
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION calc_h_fin() OWNER TO postgres;
Merci beaucoup !
devone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 13h37   #2
Invité de passage
 
Inscription : mai 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 3
Points : 1
Points : 1
J'ai modifié la procdure comme ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE OR REPLACE FUNCTION calc_h_fin()
  RETURNS TRIGGER AS
$BODY$
 
 
DECLARE 
 
val interval;
 
BEGIN
 
FOR val IN SELECT evenem_hdeb+evenem_retard FROM osiris
LOOP
  NEW.h_fin_incident := val ;  
 
END LOOP;
RETURN NEW;
 
END;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION calc_h_fin() OWNER TO postgres;
les valeurs s'écrivent pour chaques tuples ,
sauf que la première valeur du premier tuple n'est pas écrite,
tout est décalé d' 1 tuple.

la valeur est donc écrite sur le tuple suivant et non dans le tuple courant
quelqu’un a une idée ?
devone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 21h45   #3
Modérateur
 
Inscription : octobre 2008
Messages : 1 505
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 505
Points : 2 034
Points : 2 034
J'ai l'impression que ce que tu voudrais faire s'écrit juste comme ça:
Code :
NEW.h_fin_incident := NEW.evenem_hdeb + NEW.evenem_retard
sans aucune requête ni aucune boucle.

Mais la boucle FOR qui écrase répétitivement la même variable permet difficilement de comprendre où tu veux en venir.
estofilo est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 10h50   #4
Invité de passage
 
Inscription : mai 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 3
Points : 1
Points : 1
Merci !!
ca marche , en effet pourquoi faire compliqué quand on peut faire simple
devone est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h35.


 
 
 
 
Partenaires

Hébergement Web