IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

fonction qui fait crasher le serveur ?


Sujet :

PostgreSQL

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2
    Points : 2
    Points
    2
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre habitué Avatar de budtucker
    Profil pro
    Développeur multimédia
    Inscrit en
    Avril 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Avril 2007
    Messages : 176
    Points : 197
    Points
    197
    Par défaut
    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.
    Sud04

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/01/2007, 09h11
  2. Réponses: 13
    Dernier message: 02/11/2006, 15h12
  3. fonction qui fait le tri d'une Table de BDD
    Par devlopassion dans le forum C++Builder
    Réponses: 7
    Dernier message: 03/10/2006, 15h28
  4. Réponses: 1
    Dernier message: 18/05/2006, 16h00
  5. qui fait le travail ? serveur ou client??
    Par lykim dans le forum Applets
    Réponses: 31
    Dernier message: 16/05/2006, 16h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo