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

Reply via email to