Logre corregirlo. Lo "partí" en dos:
Ya me jala correcto cuando invoco a la funcion : Formatea_Hilado que es donde hace el procedimiento. El detalle es que me devuelve dos registros..debiendome devolver solo uno que seria la combinación de dos o mas registros que existan..o sea solo un registro/dato combinado... Como deberia hacerlo ??? CREATE OR REPLACE FUNCTION public."Combinacion" ( numero_ficha integer ) RETURNS SETOF varchar AS $body$ DECLARE retorno RECORD ; cHilado varchar(500); BEGIN cHilado :=''; FOR retorno IN SELECT vmhilados.* FROM vmhilados INNER JOIN vfichas_hilado ON vmhilados.seq_mhilados = vfichas_hilado.seq_mhilados WHERE vfichas_hilado.seq_fichas =numero_ficha LOOP cHilado := cHilado || public."Formatea_Hilado"(retorno.titulo, retorno.descripcion, retorno.por_alg, retorno.por_nyl, retorno.por_pol, retorno.por_lyc, retorno.por_coc, retorno.por_vis, retorno.por_acr) ; RETURN NEXT cHilado; END LOOP; RETURN ; END $body$ LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER COST 100 ; ________________________________ De: Jaime Casanova <jaime.casan...@2ndquadrant.com> Enviado: viernes, 29 de diciembre de 2017 3:41 Para: Alvaro Herrera Cc: Micky Khan; FORO POSTGRES Asunto: Re: Recorrer Tabla/cursor y formar un solo dato On 28 December 2017 at 16:57, Alvaro Herrera <alvhe...@alvh.no-ip.org> wrote: > > Me parece que hay más problemas en tu código, y me parece que hay una > manera más simple de solucionar el requerimiento, pero eso te puedo > decir por ahora. > Empezando porque siempre debes tratar de solucionar los problemas por separados, así son más fáciles de manejar. Lo primero que se me ocurrió es que deberían ser dos funciones: 1) una que concatene un sólo registro 2) otra que recorra la tabla, llame la primera función y concatene Una vez que lo separé así fue obvio que esto se puede hacer con una función y una consulta: SELECT string_agg(funcion_que_formatea_un_registro(vfichas_hilado)) FROM vfichas_hilado WHERE seq_fichas = numero_ficha donde la función funcion_que_formatea_un_registro() recibe un parámetro que es un record, no lo probé ahorita pero es la idea -- Jaime Casanova www.2ndQuadrant.com<http://www.2ndQuadrant.com> Professional PostgreSQL | 2ndQuadrant <http://www.2ndquadrant.com/> www.2ndquadrant.com 2ndQuadrant PostgreSQL - Products & Services for PostgreSQL PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services