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 ;
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. |