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 :

Problème dans une fonction


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Problème dans une fonction
    Bonjours,

    Je doit ajouter dans une table (qui correspond aux noeuds d'un graphe) les coordonnées de départ d'une arrete correspondante.
    L'idée générale a été posée, mais j'ai une erreur dans la condition IF qui suit :
    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
    CREATE OR REPLACE FUNCTION map3d_geom2node(table_geom character varying, table_node character varying) RETURNS void AS
    $$
    	DECLARE
     
    		row_node_modify record;
    		row_edge_to_node record;
     
    	BEGIN
     
    		-- If the column the geom do not exist on table_node, it must be added
    		IF NOT EXISTS(SELECT the_geom FROM table_node DESC LIMIT 1) THEN
    			EXECUTE 'SELECT AddGeometryColumn(' || quote_ident() || ', ' || quote_ident(table_node) || ',' || quote_ident(the_geom) || ',' || quote_ident(-1) || ',' || quote_ident(POINT) || ',2);' 
    		END IF;
     
    		-- for each table_node row, we get the starting point of the edge
    		FOR row_node_modify IN EXECUTE 'SELECT * FROM ' || quote_ident(table_from) LOOP
    				EXECUTE 'SELECT INTO row_edge_to_node startPoint(geometryN(the_geom, 1)) FROM ' || quote_ident(table_geom) || ' WHERE source_id=' || quote_ident(row_node_modify.id) || ' DESC LIMIT 1;'
    				EXECUTE 'UPDATE table_node SET the_geom=' || quote_ident(SELECT startPoint(row_edge_to_node.the_geom)) || ' WHERE id=' || quote_ident(row_node_modify.id) || ';';
    		END LOOP;
     
    	END;
    $$
    LANGUAGE plpgsql;
    Merci de votre aide, cela doit être une petite erreur très bete.

  2. #2
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    et c'est quoi l'erreur?
    ton premier quote_ident() ne contient rien, c'est normal?

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Voilà une version un peu plus correcte mais qui ne marche toujours pas.
    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
    CREATE OR REPLACE FUNCTION map3d_geom2node(table_geom character varying, table_node character varying) RETURNS void AS
    $body$
    	DECLARE
    	 	test record;
    		row_node_modify record;
    		row_edge_to_node record;
    		start_point geometry;
    		geom character varying;
     
    	BEGIN 
    		-- Test l'existance de la colonne the_geom, ajout si elle exist pas
    		IF NOT EXISTS(SELECT * FROM information_schema.columns WHERE column_name='the_geom' AND table_name=table_node) THEN
    			EXECUTE 'SELECT AddGeometryColumn(\'\',\'' || quote_ident(table_node) || '\', \'the_geom\', \'-1\', \'MULTIPOINT\',2)'; 
    		END IF;
     
    		FOR row_node_modify IN EXECUTE 'SELECT * FROM ' || quote_ident(table_node) LOOP
    			SELECT * INTO row_edge_to_node FROM table_geom WHERE source_id=row_node_modify.id LIMIT 1;
    			geom := startPoint(geometryN(the_geom,1));
    			EXECUTE 'UPDATE ' || quote_ident(table_node) || ' SET the_geom=' || geom || ' WHERE id=' || row_node_modify.id;
    		END LOOP;
     
    	END;
    $body$
    LANGUAGE 'plpgsql' VOLATILE STRICT;
    Code d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    D:\Share\SQL>psql -f add_geom2node.psql test
    psql:add_geom2node.psql:31: ERREUR:  erreur de syntaxe sur ou prÞs de ½$1+ au caractÞre 17
    REQU-TE : SELECT  * FROM  $1  WHERE source_id= $2  LIMIT 1
    CONTEXTE : SQL statement in PL/PgSQL function "map3d_geom2node" near line 15
    psql:add_geom2node.psql:31: LIGNE 1 : SELECT  * FROM  $1  WHERE source_id= $2  LIMIT 1
    psql:add_geom2node.psql:31:

Discussions similaires

  1. problème dans une fonction d'authentification
    Par sarita_ima dans le forum ASP.NET
    Réponses: 1
    Dernier message: 07/09/2008, 14h59
  2. Petit problème dans une fonction
    Par Jiyuu dans le forum wxPython
    Réponses: 6
    Dernier message: 08/07/2008, 22h49
  3. probléme dans une fonction qui retourne un data reader
    Par saraenim dans le forum Windows Forms
    Réponses: 32
    Dernier message: 28/04/2008, 21h53
  4. Problème dans une fonction PL/SQL
    Par jnayna86 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 19/04/2008, 13h28
  5. [Debutant] Problème dans une fonction
    Par haludo dans le forum Langage
    Réponses: 4
    Dernier message: 19/10/2006, 09h25

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