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 ;