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 :

Update dans fonction avec boucle


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 26
    Points : 15
    Points
    15
    Par défaut Update dans fonction avec boucle
    Bonjour a tous,

    Je commence un peu a en ce dimanche normalement pepere car je suis bloqué sur une fonction que j'essaye de modifier depuis pas mal de temps sans succes...Je suis novice avec les fonctions postgres et la solution est peut etre des plus simples donc avis aux ames charitables pour me sortir de la panade...

    Voici la fonction que j'utilise (fonction de pgrouting que j'ai modifie pour lire plusieurs origine destination dans une table)

    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
    26
    27
    28
    29
    30
    31
    32
    33
     
     
    DECLARE 
     r record;
     path_result record;
     v_id integer;
     e_id integer;
     geom geoms;
     id integer;
     t record;
     
    BEGIN
     
     id :=0;
     FOR t IN SELECT * FROM tmp_od_primaire LOOP
     
     FOR path_result IN EXECUTE 'SELECT gid,the_geom FROM ' ||
              'shortest_path(''SELECT gid as id, source::integer, target::integer, ' || 
              'length::double precision as cost FROM ' ||
       quote_ident(geom_table) || ''', ' || t.id_o || 
              ' , ' || t.id_d || ' , false, false), ' || 
              quote_ident(geom_table) || ' where id_section = gid ' 
            LOOP
                     geom.gid      := path_result.gid;
                     geom.the_geom := path_result.the_geom;
       id := id+1;
       geom.id       := id;
     
                     RETURN NEXT geom;
     END LOOP;  
     END LOOP;
     RETURN;
    END;
    J'appelle cette fonction dans la requete suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    /*CREATION DE LA TABLE RESULTAT     OK*/
     
    CREATE TABLE dijsktra_result(gid int4) with oids;
     
    SELECT AddGeometryColumn('dijsktra_result', 'the_geom', '3947', 'MULTILINESTRING', 2);
     
    INSERT INTO dijsktra_result (the_geom) 
     
                SELECT the_geom FROM dijkstra_sp('vue_section', 52, 35);
    Cette premiere etape marche nickel...Seulement j'essaye de recuperer les identifiant origine et destination dans la table resultat afin de pouvoir les separer et leur appliquer des traitement. Mais horreur, j'arrive toujours au meme resultat, a savoir la colonnes geometry remplie correctement mais les autres vides.

    Pour info, j'essaye simplement d'integrer dans ma boucle un update id_o et id_d afin de recuperer les origines destination de chaque section de rue traitee avec un truc style UPDATE en fin mais il me plante :

    Fonction modifiee qui plante :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
    DECLARE 
     r record;
     path_result record;
     v_id integer;
     e_id integer;
     geom geoms;
     id integer;
     t record;
     
    BEGIN
     
     id :=0;
     FOR t IN SELECT * FROM tmp_od_primaire LOOP
     
     FOR path_result IN EXECUTE 'SELECT gid,the_geom FROM ' ||
              'shortest_path(''SELECT gid as id, source::integer, target::integer, ' || 
              'length::double precision as cost FROM ' ||
       quote_ident(geom_table) || ''', ' || t.id_o || 
              ' , ' || t.id_d || ' , false, false), ' || 
              quote_ident(geom_table) || ' where id_section = gid ' 
            LOOP
                     geom.gid      := path_result.gid;
                     geom.the_geom := path_result.the_geom;
       id := id+1;
       geom.id       := id;
     
                     RETURN NEXT geom;
     END LOOP;
     
    UPDATE dijsktra_result SET id_or=id_o FROM  t WHERE id_or is null
    UPDATE dijsktra_result SET id_dr=id_d FROM  t WHERE id_or is null
     
     END LOOP;
     RETURN;
    END;
    Personne n'aurait une petite idee svp?

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Quel est le message d'erreur?

Discussions similaires

  1. Rajouter variable dans fonction avec boucle
    Par bergoliv dans le forum Langage
    Réponses: 12
    Dernier message: 03/09/2010, 21h37
  2. GENIO - Fonction avec Boucle
    Par Slyten dans le forum OTIC (ex-Genio)
    Réponses: 6
    Dernier message: 25/09/2009, 16h04
  3. Enregistrement dans BDD avec boucle: Error!
    Par tryks dans le forum Langage
    Réponses: 8
    Dernier message: 24/05/2009, 17h32
  4. [Prototype] Passage de variables dans fonction
    Par Overstone dans le forum Bibliothèques & Frameworks
    Réponses: 7
    Dernier message: 09/06/2008, 16h52
  5. Update dans SYBASE avec jointure sur 2 colonnes
    Par metheorn dans le forum Sybase
    Réponses: 2
    Dernier message: 24/06/2005, 16h51

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