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 19/04/2007, 14h36   #1
Invité de passage
 
Inscription : janvier 2005
Messages : 2
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2
Points : 1
Points : 1
Par défaut fonction qui fait crasher le serveur ?

Voila j'utilise une fonction Postgresql pour écrire dans une table et quand je la lance le serveur ne réponds plus.

Le but étant à partir des données d'une table écrire dans une autre table, le but final étant d'obtenir une liste permutée pour un thesaurus

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
CREATE FUNCTION gen_liste_permut() RETURN void AS'
 
declare
	colval record;
	tmpg text;
	tmpd text;
	tmp text;
	pos integer;
begin for colval in select descripteur,id_terme from terme limit 10 loop
	tmp:=colval.descripteur;
	while tmp != '' loop
		pos:=position(' ' in tmp);
		if pos>0 then
			tmpg:=substring(tmp,1,position(' ' in tmp));
			tmpd:=substring(tmp,position(' ' in tmp)+1,length(tmp));
			insert into liste_permut (id_terme,cold,colg) values (colval.id_terme,tmpd,tmpg);
		else 
			insert into liste_permut (id_terme,cold,colg) values (colval.id_terme,tmp,'');
			tmp:='';
		end if;
	end loop;
end loop;
return 1;
end;
' LANGUAGE plpgsql;
pour l'éxcuter je fais :

Code :
SELECT gen_liste_permut()
j'ai tester avec d'autres fonction plus légères écrivant dans la table ca marche très bien, alors pensez vous que le plantage vienne de la lourdeur de celle-ci

merci de votre aide
hannibal69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 15h06   #2
Membre actif
 
Avatar de budtucker
 
Développeur multimédia
Inscription : avril 2007
Messages : 175
Détails du profil
Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : avril 2007
Messages : 175
Points : 174
Points : 174
C'est normal, tu as une boucle infinie.
tmp n'est jamais modifié dans ton while. une fois entré dans ta boucle, rien n'est fait pour en sortir.
budtucker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 16h00   #3
Invité de passage
 
Inscription : janvier 2005
Messages : 2
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2
Points : 1
Points : 1
finalement j'y suis arrivé donc pour info je vous met la fonction correcte qui génère une liste permutée à partir d'une table, ca pourra toujours servir à ceux qui developpent des outils autour d'un thesaurus:

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
declare
	colval record;
	tmpg text;
	tmpd text;
	tmp text;
	pos integer;
begin
FOR colval IN SELECT descripteur,id_terme FROM terme loop
	tmp:=colval.descripteur;
	while tmp != '' loop
		pos:=position(' ' IN tmp);
		IF pos>0 then
				   tmpd:=substring(tmp,position(' ' IN tmp)+1,length(tmp));
				   tmpg:=substring(colval.descripteur,1,length(colval.descripteur)-length(tmpd));
		   INSERT INTO liste_permut (id_terme,cold,colg) VALUES (colval.id_terme,tmpd,tmpg);
				   tmp:=tmpd;
		else 
			INSERT INTO liste_permut (id_terme,cold,colg) VALUES (colval.id_terme,tmp,'');
			tmp:='';
		end IF;
	end loop;
end loop;
RETURN 1;
end;

en effet le problème venait de ma boucle dont je ne sortais pas, erreur classique j'ai honte
hannibal69 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 01h38.


 
 
 
 
Partenaires

Hébergement Web