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: Recorrer Tabla/cursor y formar un solo dato
Date: 2017-12-28 21:22:29
Message-ID: AM4P190MB0225F2DE362825E8F8AAE2F4D7040@AM4P190MB0225.EURP190.PROD.OUTLOOK.COM
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Buenas Tardes ::

Tengo una tabla con varios registros(miles).
Lo que necesito es recorrerlos 1 x 1 y dependiendo de ciertas caracteristicas devolver solo 1 registro combinado.

Por ejemplo :

SELECT * FROM vmhilados where seq_mhilados between 14 and 15

esto me devuelve estos datos :

titulo descripcion por_alg por_pol por_vis
22/1 PESCO 100 50
24/1 COCVIS 100 60 40

Debo recorrer cada registro y preguntar :

declare variable_retorno varchar

CASE descripcion = 'PESCO'
variable_retorno = variable_retorno + titulo + descripcion + por_pol + '/' + por_alg
CASE descripcion = "COCV"
variable_retorno = variable_retorno + titulo + descripcion + por_pol + '/' + por_vis

y debo retornar
RETURN variable_retorno

Hasta el momento tengo esto :

y me muestra este error :
ERROR: no coinciden los paréntesis en o cerca de «;»
LINE 11: ...CAST( cast( por_pol as INTEGER) as CHAR(5) END CASE || '/' ;

Por favor una guia o modelo de esto que necesitop, gracias miles....

CREATE OR REPLACE FUNCTION public."Combinacion" ( numero_ficha integer )

RETURNS VARCHAR AS

$body$
DECLARE retorno RECORD ; cHilado1 varchar(50); cHilado2 varchar(50);
BEGIN
FOR retorno IN SELECT * FROM vfichas_hilado WHERE seq_fichas = numero_ficha
LOOP
CASE

WHEN descripcion = 'PESCO' Then

cHilado1 := TRIM(titulo)|| ' ' || cHilado1 || CASE WHEN cast( left(cast( por_pol as char(10) ), 2) as INTEGER) > 0 THEN cast( por_pol as char(10) ) ELSE CAST( cast( por_pol as INTEGER) as CHAR(5) END CASE || '/' ;
CASE WHEN cast( left(cast( por_alg as char(10) ), 2) as INTEGER) > 0 THEN cast( por_alg as char(10) ) ELSE CAST( cast( por_alg as INTEGER) as CHAR(5) END CASE ;

cHilado2 := cHilado2 || 'PES ' || cHilado1 ;

WHEN descripcion = 'COC/VIS' Then

cHilado1 := titulo || ' ' || cHilado1 || CASE WHEN cast( left(cast( por_alg as char(10) ), 2) as INTEGER) > 0 THEN cast( por_alg as char(10) ) ELSE CAST( cast( por_alg as INTEGER) as CHAR(5) END CASE || '/' ||
CASE WHEN cast( left(cast( por_vis as char(10) ), 2) as INTEGER) > 0 THEN cast( por_vis as char(10) ) ELSE CAST( cast( por_vis as INTEGER) as CHAR(5) END CASE ;

cHilado2 := cHilado2 || TRIM(descripcion) || ' ' || cHilado1 ;

WHEN descripcion = 'MELANGE' Then

cHilado2 := cHilado2 || TRIM(titulo) || ' MEL ' || CASE WHEN cast( left(cast( por_pol as char(10) ), 2) as INTEGER) > 0 THEN cast( por_pol as char(10) ) ELSE CAST( cast( por_pol as INTEGER) as CHAR(5) END CASE || '%' ;

WHEN descripcion = 'COC' Then

cHilado1 := titulo || ' COC ' ;

Chilado2 := Chilado2 || ' ' || cHilado1 ;

WHEN descripcion = 'HEATHER' Then

cHilado1 := titulo || ' ' || CASE WHEN cast( left(cast( por_coc as char(10) ), 2) as INTEGER) > 0 THEN cast( por_coc as char(10) ) ELSE CAST( cast( por_coc as INTEGER) as CHAR(5) END CASE || ' ' || ;
cHilado2 := cHilado2 || TRIM(descripcion) || ' ' || cHilado1 ;

ELSE

cHilado2 = cHilado2 || titulo || ' ' || LEFT(descripcion, 3) || ' ' ;

CASE WHEN por_alg = 100 THEN cHilado2 := '' ELSE cHilado2 := cHilado2 || cast( por_alg as char(10) END CASE ;
CASE WHEN por_nyl = 100 THEN cHilado2 := '' ELSE cHilado2 := cHilado2 || cast( por_nyl as char(10) END CASE ;
CASE WHEN por_pol = 100 THEN cHilado2 := '' ELSE cHilado2 := cHilado2 || cast( por_pol as char(10) END CASE ;
CASE WHEN por_lyc = 100 THEN cHilado2 := '' ELSE cHilado2 := cHilado2 || cast( por_lyc as char(10) END CASE ;
CASE WHEN por_coc = 100 THEN cHilado2 := '' ELSE cHilado2 := cHilado2 || cast( por_coc as char(10) END CASE ;
CASE WHEN por_vis = 100 THEN cHilado2 := '' ELSE cHilado2 := cHilado2 || cast( por_vis as char(10) END CASE ;
CASE WHEN por_acr = 100 THEN cHilado2 := '' ELSE cHilado2 := cHilado2 || cast( por_acr as char(10) END CASE ;

END CASE;

RETURN NEXT retorno;
END LOOP;

RETURN cHilado2;
END
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100 ;

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2017-12-28 21:57:08 Re: Recorrer Tabla/cursor y formar un solo dato
Previous Message Gerardo Herzig 2017-12-25 21:04:31 Re: Feliz navidad y una consulta.