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 ;


Reply via email to