Estimados Como contribución a la lista, les dejo un ejemplo de como solucione el problema, se tuvo que crear : 1) Una estructura de type con los tipos que retorna la función CREATE TYPE "danmaf"."ty_gen_obt_estab_punto" AS ( "establecimiento" VARCHAR, "punto" VARCHAR, "autorizacion" VARCHAR);
2) Cambiar el función como se muestra a continuación, es decir referncia al nuevo tipo creado CREATE OR REPLACE FUNCTION "danmaf"."gen_obt_estab_punto" (p_id_empresa integer, p_unidad_adm varchar) RETURNS SETOF "danmaf"."ty_gen_obt_estab_punto" AS$body$DECLARE v_establecimiento varchar(3); v_punto varchar(3); v_rec_salida danmaf.ty_gen_obt_estab_punto;BEGIN for v_rec_salida in SELECT fa.establecimiento,fa.punto,fa.autorizacion FROM danmaf.gen_documento gd,danmaf.fac_autorizaciones fa WHERE gd.id_documento=fa.id_documento and gd.nombre='FACTURA' and gd.id_empresa=p_id_empresa and fa.cod_unidad=p_unidad_adm loop return next v_rec_salida; end loop; return ; END;$body$LANGUAGE 'plpgsql'VOLATILECALLED ON NULL INPUTSECURITY INVOKERCOST 100 ROWS 1000; La manera de ejecutar desde consola es:select * from "danmaf"."gen_obt_estab_punto" (4, '1'); No está por demás indicar que cuando una función es de tipo set of y devuelve un record, no hay poder humano para ejecutarlo como indica el manual: select * from "danmaf"."gen_obt_estab_punto" (4, '1') resp(col1, char,col2 char, col3 char); ==> ESTO NO FUNCIONA NO PIERDAN TIEMP AL MENOS EN POSTGRES 8.3 NO FUNCIONA Si alguien tiene una mejor solución agradecería se comparta.... Nota.- No se como mandar un mail sin formato Html... > Date: Tue, 21 Apr 2009 09:51:03 -0300 > Subject: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Como ejecuto una función set > of record desde consola > From: postgres....@gmail.com > To: alfonsoreyesc...@hotmail.com > CC: pgsql-es-ayuda@postgresql.org > > El día 20 de abril de 2009 23:30, ALFONSO REYES > <alfonsoreyesc...@hotmail.com> escribió: >> Estimada Lista >> Mi pregunta es sencilla, tengo una función de tipo return set of record con >> 2 parámetros de ingreso int y char : >> CREATE OR REPLACE FUNCTION "danmaf"."gen_obt_estab_punto_dos" (p_id_empresa >> integer, p_unidad_adm varchar) RETURNS SETOF record AS >> $body$ >> DECLARE >> v_establecimiento varchar(3); >> v_punto varchar(3); >> v_rec_salida record; >> BEGIN >> for v_rec_salida in >> (SELECT fa.establecimiento,fa.punto,fa.autorizacion >> FROM danmaf.gen_documento gd,danmaf.fac_autorizaciones fa >> WHERE gd.id_documento=fa.id_documento >> and gd.nombre='FACTURA' >> and gd.id_empresa=p_id_empresa >> and fa.cod_unidad=p_unidad_adm) >> loop >> return next v_rec_salida; >> end loop; >> return; >> END; >> $body$ >> LANGUAGE 'plpgsql' >> VOLATILE >> CALLED ON NULL INPUT >> SECURITY INVOKER >> COST 100 ROWS 1000; >> >> >> Según lo que he leído en la red y una vez que me ayudo Alvaro Herrera, creo >> que estoy haciendo lo correcto: >> INTERNET DICE QUE SE EJECUTA ASI: >> SELECT "danmaf"."gen_obt_estab_punto_dos"(4,'1') as f(col1 char,col2 char >> ,col3 char ); >> >> SELECT "danmaf"."gen_obt_estab_punto_dos"(4,'1') as >> f(col1 text,col2 text ,col3 text ); >> >> RESULTADO ERROR : >> ERROR: syntax error at or near "(" >> LINE 1: ...ECT "danmaf"."gen_obt_estab_punto_dos"(4,'1') as f(cola text... >> ALVARO ME INDICO EN ESTE CORREO: >> >> ALFONSO REYES escribió: >> >> Marcos, muchas gracias por tú ayuda, pero a lo que me refiero es como >> debería >> jecutarla desde el query builder, por ejemplo a las funciones que retirnan >> un refcursor se las ejecuta asi: Begin; select funcion('resp_ref_cursor'); >> fecth all in "resp_ref_cursor"; commit; >> >> En cambio cuando es un afunción de tipo record como la ejecuto desde el >> query >> builder.. >> >> select * from function( ... ) >> >> Si es "setof record" entonces tienes que especificar el tipo del record: >> >> select * from function( ... ) as f(a int, b text, c text, ...) >> >> -- Alvaro Herrera http://www.PlanetPostgreSQL.org/ "I'm impressed how >> quickly you are fixing this obscure issue. I came from MS SQL and it would >> be hard for me to put into words how much of a better job you all are doing >> on [PostgreSQL]." Steve Midgley, >> http://archives.postgresql.org/pgsql-sql/2008-08/msg00000.php >> >> -- TIP 3: Si encontraste la respuesta a tu problema, publícala, otros te lo >> agradecerán >> >> Para terminar cuando la ejecuto desde el EXECUTE de la función del SQL >> MANAGER FOR POSTGRES 2007 SI FUNCIONA !!! Y PRIMERO ME PIDE LAS COLUMNAS y >> luego obtengo el resultado, >> >> por favor quisiera saber que estoy haciendo mal... > > Retorna un set of record, > > SELECT * FROM "danmaf"."gen_obt_estab_punto_dos" (1, 'empresa'); > > > No mandes en formato HTML el mail por favor. > > > -- > Emanuel Calvo Franco > Sumate al ARPUG ! > (www.postgres-arg.org - > www.arpug.com.ar) > ArPUG / AOSUG Member > Postgresql Support & Admin > -- > TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net _________________________________________________________________ Show them the way! Add maps and directions to your party invites. http://www.microsoft.com/windows/windowslive/products/events.aspx