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 25/05/2008, 00h10   #1
Candidat au titre de Membre du Club
 
Enseignant
Inscription : décembre 2007
Messages : 28
Détails du profil
Informations personnelles :
Âge : 24

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : décembre 2007
Messages : 28
Points : 13
Points : 13
Par défaut Trigger before update

Bonjour, voici mon probleme, qui je pense est facile a résoudre mais je n'y arrive pas :

Mon trigger devrait faire des updates a certaines personnes mais il fait le delete du match. Incompréhensible pour moi vu que si je met des commentaires dans tout le trigger il fait quand meme le delete du match.
Par contre si je supprime le trigger il ne le fait pas.

Code :
1
2
CREATE TRIGGER distribuer_mise BEFORE UPDATE ON JOUER
    FOR EACH ROW EXECUTE PROCEDURE verifier_competmatch();
Code :
1
2
3
4
5
6
7
8
9
CREATE OR REPLACE FUNCTION distribuer_mise () RETURNS TRIGGER AS '

BEGIN

     ici le code mais le probleme ne vient surement pas de la car en mettant des commentaires le probleme persiste.

RETURN NEW;
END;
' LANGUAGE 'plpgsql';
Si quelqu'un comprend le probleme merci de me faire par d'une solution.
Virtuosity est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 20h27   #2
Membre du Club
 
Inscription : janvier 2008
Messages : 63
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 63
Points : 58
Points : 58
Citation:
Envoyé par Virtuosity Voir le message
Bonjour, voici mon probleme, qui je pense est facile a résoudre mais je n'y arrive pas :

Mon trigger devrait faire des updates a certaines personnes mais il fait le delete du match. Incompréhensible pour moi vu que si je met des commentaires dans tout le trigger il fait quand meme le delete du match.
Par contre si je supprime le trigger il ne le fait pas.

Code :
1
2
CREATE TRIGGER distribuer_mise BEFORE UPDATE ON JOUER
    FOR EACH ROW EXECUTE PROCEDURE verifier_competmatch();
Code :
1
2
3
4
5
6
7
8
9
CREATE OR REPLACE FUNCTION distribuer_mise () RETURNS TRIGGER AS '
 
BEGIN
 
     ici le code mais le probleme ne vient surement pas de la car en mettant des commentaires le probleme persiste.
 
RETURN NEW;
END;
' LANGUAGE 'plpgsql';
Si quelqu'un comprend le probleme merci de me faire par d'une solution.
Si tu es sûr, essaye de voir "RETURN NEW". Remplace par "RETURN OLD" pour voir ce qui se passe.

Donne-nous au moins le code de la fonction pour analyse
sdanvbnet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 22h51   #3
Candidat au titre de Membre du Club
 
Enseignant
Inscription : décembre 2007
Messages : 28
Détails du profil
Informations personnelles :
Âge : 24

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : décembre 2007
Messages : 28
Points : 13
Points : 13
Avec Return OLD; cela ne fonctionne pas non plus.

Voici le trigger :

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
27
28
29
30
31
32
33
34
35
36
37
38
CREATE OR REPLACE FUNCTION distribuer_mise () RETURNS TRIGGER AS '
 
DECLARE
cursmise refcursor;
iduti "public"."miser"."id_utilisateur"%TYPE;
idmatch "public"."miser"."id_match"%TYPE;
idjoueur "public"."miser"."id_joueur"%TYPE;
res "public"."jouer"."resultat"%TYPE;
mont "public"."miser"."montant_mise"%TYPE;
cot "public"."cote"."cote"%TYPE;
 
BEGIN
mont = 0;
cot = 0;
IF OLD.resultat IS NULL
THEN
	IF NEW.resultat = TRUE
	THEN
		OPEN cursmise for 
			SELECT id_utilisateur, id_match, id_joueur, montant_mise FROM MISER WHERE id_match = NEW.id_match;
		FETCH cursmise INTO iduti, idmatch, idjoueur, mont;
		WHILE FOUND LOOP
			SELECT cote INTO cot FROM COTE WHERE id_match = NEW.id_match AND id_joueur = NEW.id_joueur;
			IF idjoueur = NEW.id_joueur
			THEN
				UPDATE UTILISATEUR SET montant_euro_utilisateur = montant_euro_utilisateur + ( mont * ( 1 + ( 1 - cot / 100 ) ) ) WHERE id_utilisateur = iduti;
			END IF;
			FETCH cursmise INTO iduti, idmatch, idjoueur, mont;
		END LOOP;
	END IF;
ELSE
RAISE EXCEPTION ''Match déja cloturé'';
END IF;	
 
 
RETURN NEW;
END;
' LANGUAGE 'plpgsql';
Virtuosity est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2008, 10h26   #4
Candidat au titre de Membre du Club
 
Enseignant
Inscription : décembre 2007
Messages : 28
Détails du profil
Informations personnelles :
Âge : 24

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : décembre 2007
Messages : 28
Points : 13
Points : 13
Virtuosity est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h20.


 
 
 
 
Partenaires

Hébergement Web