From: | Jaime Casanova <systemguards(at)gmail(dot)com> |
---|---|
To: | J(dot) Arturo Llanquihuén Martínez <arturo(at)llanquihuen(dot)cl> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Retornar varios registros desde una funcion en pl/pgsql |
Date: | 2005-02-17 21:55:00 |
Message-ID: | c2d9e70e05021713552dc57225@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On Thu, 17 Feb 2005 16:31:57 -0300, J. Arturo Llanquihuén Martínez
<arturo(at)llanquihuen(dot)cl> wrote:
> Hola listeros
> estoy iniciandome en lo que se refiere a funciones, logrando realizar
> algunas basicas pero muy utiles para mis necesidades, ahora me tope con un
> problema , necesito devolver varios o ningun registro desde una consulta, he
> probado varias soluciones pero la verdad no me funcionan. Adjunto la funcion
> que hice, para que me puedan dar su opinion y en que estoy fallando.
>
> CREATE or replace FUNCTION itinerario.info_geocerca(geometry) RETURNS setof
> public.calles AS '
> DECLARE
> geocerca alias for $1;
> captura_comuna integer;
> captura_datos setof public.calles;
> BEGIN
> select INTO captura_comuna id from public.comunas where
> Intersects(the_geom,geocerca) ;
> IF captura_comuna.region is null THEN
> RAISE INFO ''Punto de Referencia fuera de Area.'';
> RETURN ''0'';
> ELSE
> select INTO captura_datos * from calles where
> comuna=captura_comuna.comuna;
> RETURN captura_datos.nombre;
> END IF;
> END;
> ' LANGUAGE plpgsql;
>
> si alguien me pudiera decir en que me equivoco, o si hay alguna otra manera
> de devolver varios registros se lo agradeceria.
> otra consulta que tengo es dentro de la funcion es como y de que manera es
> mas optimo recorrer los registros de captura_datos
> para seguir aplicando filtros.
>
> agradecido de antemano.
>
Seria bueno que incluyas el error que te da la base. Por lo pronto te
adelanto algunos problemas:
1) no se declara una variable setof
2) el select lo recorres con for
en definitiva seria algo como:
CREATE or replace FUNCTION itinerario.info_geocerca(geometry) RETURNS setof
public.calles AS '
DECLARE
geocerca alias for $1;
captura_comuna integer;
captura_datos record;
BEGIN
for captura_comuna in select id from public.comunas
where Intersects(the_geom,geocerca)
loop
select INTO captura_datos * from calles
where comuna=captura_comuna.comuna;
RETURN NEXT captura_datos;
END loop;
IF NOT FOUND THEN
RAISE INFO ''Punto de Referencia fuera de Area.'';
RETURN ''0'';
END IF;
RETURN;
' LANGUAGE plpgsql;
creo.. si te da error avisa. con el error incluido
atentamente,
Jaime Casanova
From | Date | Subject | |
---|---|---|---|
Next Message | Roberto Cesar Najera | 2005-02-18 08:40:38 | Replicacion |
Previous Message | Jaime Casanova | 2005-02-17 21:29:28 | Re: tabla temporal |