Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/09/2010, 16:45
Avatar de webness
webness
 
Fecha de Ingreso: enero-2009
Ubicación: BOGOTA
Mensajes: 312
Antigüedad: 15 años, 3 meses
Puntos: 5
Store procedure con execute y update

holita a todos. tengo un procedimiento almacenado que debe:
1) hacer un select
2) crear unos campos geometricos
3) actualizar los valores de estos campos geometricos
4) crear un indice geoespacial

CUANDO EJECUTO EL SP ME GENERA ERROR EN EL PUNTO 3 AL HACER UN UPDATE Y EJECUTARLO CON EXECUTE sql;

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION p_poblaingas_geoindex(CHARACTER VARYING)
  2.   RETURNS void AS
  3. $BODY$
  4. DECLARE
  5.     rec refcursor;
  6.     SQL VARCHAR;
  7.     city    ALIAS FOR $1;
  8.     year_mi INTEGER;
  9.     year_ma INTEGER;
  10.     i   INTEGER;
  11.  
  12. BEGIN
  13.     SQL :=  'SELECT MIN(periodo) AS min,MAX(periodo) AS max
  14.          FROM   servcon_poblaingas_'||city;
  15.          
  16.     OPEN rec FOR EXECUTE SQL;
  17.     FETCH rec INTO year_mi,year_ma;
  18.    
  19.     i    :=  year_mi;      
  20.    
  21.     LOOP
  22.         SQL := 'SELECT AddGeometryColumn ('||QUOTE_LITERAL('servcon_poblaingas_'||city||'_'||i)||','||QUOTE_LITERAL('geom')||',4326,'||QUOTE_LITERAL('POINT')||',2)';
  23.         EXECUTE SQL;
  24.  
  25.         SQL := 'UPDATE servcon_poblaingas_'||city||'_'||i||' set geom = GeometryFromText('||QUOTE_LITERAL('POINT('||cx||' '||cy||')')||',4326)';
  26.         EXECUTE SQL;
  27.  
  28.         SQL := 'CREATE INDEX idx_servcon_poblaingas_'||city||'_'||i||' ON servcon_info2009 USING GIST (geom)';
  29.         EXECUTE SQL;
  30.         i  := i + 1;
  31.                    
  32.         EXIT WHEN  i > year_ma;
  33.     END LOOP;
  34.  
  35.     RETURN;
  36. END;
  37. $BODY$
  38.   LANGUAGE 'plpgsql' VOLATILE;

el error que me saca es este:

ERROR: column "cx" does not exist
CONTEXT: SQL statement "SELECT 'UPDATE servcon_poblaingas_'|| $1 ||'_'|| $2 ||' set geom = GeometryFromText('||QUOTE_LITERAL('POINT('||cx||' '||cy||')')||',4326)'"
PL/pgSQL function "p_poblaingas_geoindex" line 23 at assignment