Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
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 22/03/2006, 20h10   #1
Membre régulier
 
Inscription : mai 2005
Messages : 120
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mai 2005
Messages : 120
Points : 98
Points : 98
Par défaut [trigger] problème de mise à jour

Bonjour,

j'ai une table qui sert à stocker les achats facturés pour des statististiques.
Mon problème est quand j'essaye de faire le trigger permettant de mettre à jour cette table à chaque modification de la table produit à condition que le produit soit facturé ( il doit donc etre référencé dans la tables facturer ) :

Citation:
CREATE OR REPLACE FUNCTION majstatAchat() RETURNS TRIGGER AS $$
DECLARE
codif TEXT;
id_mois TEXT;
BEGIN

SELECT INTO codif,id_mois lower(substr(numFact, 1,4)), substr(dateFacture, 6,2)
FROM FACTURER F1
INNER JOIN FACTURES F2 ON F1.idFacture=F2.idFacture
WHERE idVO=NEW.idVO;

IF codif IS NULL THEN

RETURN NULL;

ELSE

IF (TG_OP = 'UPDATE') THEN
UPDATE stat_achat_mois SET fa07=(fa07 - OLD.prixachat + NEW.prixachat) WHERE idmois = '02';
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
UPDATE stat_achat_mois SET fa07=(fa07 + NEW.prixachat) WHERE idmois = '02';
RETURN NEW;
END IF;

END IF;
END;
$$ language plpgsql;


CREATE TRIGGER trig_majstatAchat
AFTER INSERT OR UPDATE ON PRODUITS
FOR EACH ROW EXECUTE PROCEDURE majstatAchat();
Je teste si codif ext différent de nul donc existe pour pouvoir mettre à jour ma table, mais, ça ne fonctionne pas.
ça fonctionne seulement si j'enlève le test IF codif IS NULL THEN ... ELSE, mais ce n'est pas ce que je cherche à faire car ça comptabilise même les produits non encore factures.

Quelqu'un peut-il m'aider pour résoudre mon problème ?

Merci d'avance.
Ouark est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2006, 22h52   #2
Membre éclairé
 
Inscription : janvier 2005
Messages : 336
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2005
Messages : 336
Points : 353
Points : 353
Bonsoir

Si
Code :
1
2
3
4
5
 
SELECT INTO codif,id_mois lower(substr(numFact, 1,4)), substr(dateFacture, 6,2)
FROM FACTURER F1
INNER JOIN FACTURES F2 ON F1.idFacture=F2.idFacture
WHERE idVO=NEW.idVO;
cette requête ne retourne pas de ligne lorsque les produits ne sont pas à facturer donc il faut faire le test suivant

Code :
1
2
3
4
 
IF NOT FOUND THEN
    RETURN NULL;
END IF;
__________________
Christophe Chauvet (KrysKool)
kryskool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2006, 01h13   #3
Membre régulier
 
Inscription : mai 2005
Messages : 120
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mai 2005
Messages : 120
Points : 98
Points : 98
Bonsoir,

merci bien, ça fonctionne avec.
Ouark 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 16h56.


 
 
 
 
Partenaires

Hébergement Web