pues podrias mejor utilizar SETOF RECORD y claro declarar la r de tipo record asi podrias obtener el resultado que deseas y solo tienes que darle un buen formato cuando le llames SELECT * FROM getLibres('campo1',NULL) as (campo1 VARCHAR(255),campo2 INTEGER)
2011/11/22 Lazaro Rubén García Martinez <lgarc...@vnz.uci.cu> > Fíjate en la estructura de la tabla, acabo de reproducir tu error, y > este se debe a que la primera columna de tu tabla es de tipo entero y en la > función estas devolviendo un varchar como primera columna. Te recomiendo > que cambies el orden en el que devuelves las cosas en la consulta definida > en la función.**** > > ** ** > > Saludos.**** > > ** ** > > *De:* pgsql-es-ayuda-ow...@postgresql.org [mailto: > pgsql-es-ayuda-ow...@postgresql.org] *En nombre de *Ana Claudia Smail > *Enviado el:* martes, 22 de noviembre de 2011 08:46 > *Para:* pgsql-es-ayuda@postgresql.org > *Asunto:* [pgsql-es-ayuda] consulta función**** > > ** ** > > Hola a todos!**** > > Estoy teniendo un problema con una función en progresql 8.4:**** > > CREATE OR REPLACE FUNCTION getLibres(varchar(20), varchar(20)) RETURNS > SETOF tabla1 AS**** > > $BODY$**** > > DECLARE**** > > r tabla1%rowtype;**** > > BEGIN**** > > IF $2 IS NULL THEN**** > > FOR r IN SELECT CAST($1 AS VARCHAR(255)),count(*) FROM > tabla1**** > > WHERE tabla1.confirmada = '1' group by 1 order by 1 **** > > LOOP**** > > RETURN NEXT r; **** > > END LOOP;**** > > END IF;**** > > RETURN;**** > > END**** > > $BODY$**** > > LANGUAGE 'plpgsql' ;**** > > ** ** > > Cuando ejecuto SELECT * FROM getLibres('campo1',NULL);**** > > ** ** > > Me tira el siguiente error:**** > > ERROR: la sintaxis de entrada no es válida para integer: «campo1»**** > > CONTEXT: PL/pgSQL function "getlibres" line 5 at bucle FOR en torno a > registros de un SELECT**** > > ** ** > > Porqué me toma el campo como integer?**** > > Gracias por su tiempo**** > > ANA**** > -- ---------------------- Dali Aparicio T. consultor TIC (591)75271108 (591)76800519 ----------------------