Re: Recorrer Tabla/cursor y formar un solo dato

From: Micky Khan <mcanchas(at)hotmail(dot)com>
To: FORO POSTGRES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Recorrer Tabla/cursor y formar un solo dato
Date: 2017-12-29 22:02:27
Message-ID: AM4P190MB02252C371B75514A3B4B46D3D7050@AM4P190MB0225.EURP190.PROD.OUTLOOK.COM
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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(dot)casanova(at)2ndquadrant(dot)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 <alvherre(at)alvh(dot)no-ip(dot)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

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2017-12-29 22:37:24 Re: Recorrer Tabla/cursor y formar un solo dato
Previous Message Alvaro Herrera 2017-12-29 20:42:34 Re: Error con PostgreSQL Falla electrica