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/04/2005, 12h12   #1
Invité de passage
 
Inscription : avril 2003
Messages : 3
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3
Points : 2
Points : 2
Par défaut Pb de curseur et de fetch sous postgres 7.4

Bonjours a toutes et tous

voici mon pb : je cherche a faire une fonvtion qui va me récupérer des valeur dans des table lors d'un insert. J'ai donc un trigger mais comme je peux avoir plusieur ligne de resultat a traiter je dois donc utiliser un curseur. Seulement voila le problème c'est que cela ne marche point.
Auriez vous une idée? Je vous joint le code qui me parrais le plus problable de ce qui devrai etre correcte syntaxiquement mais j'ai toujour une erreur au niveau du fatch quoi que je fasse apres.
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
39
40
DECLARE
cur 		refcursor;		
num_lot_fab	"Production"."PR_Sortie_stock"."num_lot_fabrication"%TYPE;
code_article	"Production"."PR_Ligne_fabrication"."code_article"%TYPE;
pcb		"Production"."PR_Ligne_fabrication"."pcb"%TYPE;
nb_unite_fab	"Production"."PR_Ligne_fabrication"."nb_unite_fabrique"%TYPE;
alveole		"Production"."PR_Ligne_fabrication"."new_alveole"%TYPE;
 
BEGIN
	UPDATE "Production"."PR_Stock_Courant" SET "nb_uc" = "nb_uc"-NEW."nb_uc"
	 WHERE "Numero_Lot" = NEW."num_lot_fabrication"
	  AND "Code_Alveole" = NEW."Code_Alveole"
	  AND "qte_uc"=New."poids_uc";
 
	IF NEW."type_sortie_stock" = 1
	THEN
		BEGIN work;
		OPEN cur FOR
		SELECT "num_lot_fabrication"|| EXTRACT(DOY FROM now()),"PF_Articles"."Code_article","PR_Ligne_fabrication"."pcb", "PR_Ligne_fabrication"."nb_unite_fabrique", "PR_Ligne_fabrication"."new_alveole"
		FROM "Production"."PR_Ligne_fabrication","ProduitsFinis"."PF_Articles"
		WHERE "PR_Ligne_fabrication"."code_article"="PF_Articles"."Code_article"
		AND "PR_Ligne_fabrication"."num_lot_fabrication"=NEW."num_lot_fabrication";
 
		FETCH ALL IN cur; --INTO num_lot_fab,code_article,pcb,nb_unite_fab,alveole;
 
		WHILE cur%FOUND
 
		LOOP
 
			INSERT INTO "ProduitsFinis"."PF_Entree_Stock"
			("Numero_Lot","Code_Article", "nb_uc", "qte_uc","type_entree_stock","date_entree_stock","heure_entree_stock","Code_Alveole")
			VALUES (num_lot_fab, code_Produit,nb_unite_fab, pcb,NEW."type_sortie_stock", now(), NOW(),alveole);
		ind = ind + 1
		END LOOP;
		CLOSE cur;
		COMMIT work;
	END IF;
 
RETURN NEW;
END;
Merci d'avance de vos réponses
pixiejl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2005, 14h39   #2
Membre habitué
 
Inscription : mai 2002
Messages : 131
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 131
Points : 142
Points : 142
C'est normal, on ne "fetch" pas dans un curseur, on "fetch" le contenu du curseur vers des variables. De plus, FETCH ALL n'existe pas en plpgsql, il te faut boucler et faire le FETCH à chaque tour. Enfin, le mot-clé FOUND ne s'utilise pas de cette manière.

Sinon, pour t'orienter vers une solution : dans ton cas, l'utilisation d'un curseur n'est pas obligatoire, il est tout à fait possible de s'en tirer avec un simple SELECT. Pour savoir comment procéder, la documentation donne un exemple que tu pourras adapter : Boucler Dans les Résultats de Requêtes

Bon courage
Quentin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2005, 15h53   #3
Invité de passage
 
Inscription : avril 2003
Messages : 3
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3
Points : 2
Points : 2
merci pour cette réponse rapide
bonne journée et bon we
pixiejl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2005, 16h06   #4
Membre habitué
 
Inscription : mai 2002
Messages : 131
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 131
Points : 142
Points : 142
je t'en prie
Quentin 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 13h36.


 
 
 
 
Partenaires

Hébergement Web