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 ;