Hola, de esta forma funciona, pero... 1.- No quiero crear un tipo para que me retorne el registro, por eso utiliza setof record 2.- yo uso parámetros in y out, para evitar el tener que crear un tipo definido por el usuario
Saludos -----Mensaje original----- De: Agustin Ignacio Genoves [mailto:agustingeno...@gmail.com] Enviado el: martes, 27 de octubre de 2009 12:58 Para: Listas CC: pgsql-es-ayuda@postgresql.org Asunto: Re: [pgsql-es-ayuda] Ayuda con Funcion Si, lo que pasa es que vos tenes que usar return registro, creo que como lo tenes planteado no te va a retornar nada. Lee lo siguiente: http://www.postgresql.org/docs/8.4/static/plpgsql-control-structures.html o fijate usando algo asi: CREATE TABLE foo (fooid INT, foosubid INT, fooname TEXT); INSERT INTO foo VALUES (1, 2, 'three'); INSERT INTO foo VALUES (4, 5, 'six'); CREATE OR REPLACE FUNCTION getAllFoo() RETURNS SETOF foo AS $BODY$ DECLARE r foo%rowtype; BEGIN FOR r IN SELECT * FROM foo WHERE fooid > 0 LOOP -- can do some processing here RETURN NEXT r; -- return current row of SELECT END LOOP; RETURN; END $BODY$ LANGUAGE 'plpgsql' ; El día 27 de octubre de 2009 12:47, Listas <mas...@gmail.com> escribió: > Estas en lo correcto y lo solicione así, pero no me arroja ningún resultado > , debiendo hacerlo????? > > -----Mensaje original----- > De: Agustin Ignacio Genoves [mailto:agustingeno...@gmail.com] > Enviado el: martes, 27 de octubre de 2009 12:43 > Para: Listas > CC: pgsql-es-ayuda@postgresql.org > Asunto: Re: [pgsql-es-ayuda] Ayuda con Funcion > > Cuando haces > > CONSULTA := 'SELECT a.id,a.opcion > FROM public.epropiedades_provincias a > WHERE a.id_estado =''SA'' and a.relacion = quote_literal(tipo)'; > > le estas pasando una variable a un string creo tendrias que concatenarlo > > 2009/10/27 Listas <mas...@gmail.com>: >> Hola Lista, miren tengo la siguiente función: >> >> >> >> CREATE OR REPLACE FUNCTION "public"."get_provincias" (co_region integer, > out >> id smallint, out opcion varchar) RETURNS SETOF record AS >> >> DECLARE >> >> CONSULTA varchar; >> >> tipo integer; >> >> >> >> BEGIN >> >> >> >> tipo = $1; >> >> >> >> IF tipo = 0 THEN >> >> CONSULTA := 'SELECT a.id,a.opcion >> >> FROM public.epropiedades_provincias a >> >> WHERE a.id_estado =''SA'' '; >> >> EXECUTE CONSULTA; >> >> END IF; >> >> >> >> IF tipo <> 0 THEN >> >> CONSULTA := 'SELECT a.id,a.opcion >> >> FROM public.epropiedades_provincias a >> >> WHERE a.id_estado =''SA'' and a.relacion = quote_literal(tipo)'; >> >> EXECUTE CONSULTA; >> >> END IF; >> >> >> >> return; >> >> END; >> >> LANGUAGE 'plpgsql' >> >> >> >> VOLATILE CALLED ON NULL INPUT SECURITY INVOKER COST 100 ROWS 1000; >> >> >> >> Al ejecutarla me señala lo siguiente : >> >> ERROR: column "tipo" does not exist >> >> >> >> Pero tipo es una variable in y está declarada Qué podrá ser >> >> >> >> Gracias de Antemano >> >> >> >> Mario >> >> >> >> >> >> >> >> >> >> __________ Información de ESET NOD32 Antivirus, versión de la base de > firmas >> de virus 4545 (20091026) __________ >> >> ESET NOD32 Antivirus ha comprobado este mensaje. >> >> http://www.eset.com >> > > > __________ Información de ESET NOD32 Antivirus, versión de la base de firmas > de virus 4545 (20091026) __________ > > ESET NOD32 Antivirus ha comprobado este mensaje. > > http://www.eset.com > > > > __________ Información de ESET NOD32 Antivirus, versión de la base de firmas > de virus 4545 (20091026) __________ > > ESET NOD32 Antivirus ha comprobado este mensaje. > > http://www.eset.com > > > __________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 4545 (20091026) __________ ESET NOD32 Antivirus ha comprobado este mensaje. http://www.eset.com __________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 4545 (20091026) __________ ESET NOD32 Antivirus ha comprobado este mensaje. http://www.eset.com -- TIP 5: ¿Has leído nuestro extenso FAQ? http://www.postgresql.org/docs/faqs.FAQ.html