Ya resolvi los errores, ahora me sale esto ERROR: error de sintaxis en o cerca de «RETURN» LINE 52: RETURN NEXT retorno; ^
CREATE OR REPLACE FUNCTION public."Combinacion" ( numero_ficha integer ) RETURNS VARCHAR AS $body$ DECLARE retorno RECORD ; cHilado1 varchar(50); cHilado2 varchar(50); Chiladox 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( por_pol as CHAR(5)) END || ' ' || CASE WHEN cast( left( cast( por_alg as char(10) ), 2) as INTEGER ) > 0 THEN cast( por_alg as char(10) ) ELSE CAST( por_alg as CHAR(5)) END ; 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( por_alg as CHAR(5)) END || '/' || CASE WHEN cast( left(cast( por_vis as char(10) ), 2) as INTEGER ) > 0 THEN cast( por_vis as char(10) ) ELSE CAST( por_vis as CHAR(5)) END ; 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( por_pol as CHAR(5)) END || '%' ; 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( por_coc as CHAR(5)) END || ' ' || ; cHilado2 := cHilado2 || TRIM(descripcion) || ' ' || cHilado1 ; ELSE cHilado2 = cHilado2 || titulo || ' ' || LEFT(descripcion, 3) || ' ' ||; SELECT CASE WHEN por_alg = 100 THEN '' ELSE cast( por_alg as char(10)) END ||' '||; SELECT CASE WHEN por_nyl = 100 THEN '' ELSE cast( por_nyl as char(10)) END ||' '||; SELECT CASE WHEN por_pol = 100 THEN '' ELSE cast( por_pol as char(10)) END ||' '||; SELECT CASE WHEN por_lyc = 100 THEN '' ELSE cast( por_lyc as char(10)) END ||' '||; SELECT CASE WHEN por_coc = 100 THEN '' ELSE cast( por_coc as char(10)) END ||' '||; SELECT CASE WHEN por_vis = 100 THEN '' ELSE cast( por_vis as char(10)) END ||' '||; SELECT CASE WHEN por_acr = 100 THEN '' ELSE cast( por_acr as char(10)) END ||' '; END RETURN NEXT retorno; END LOOP; RETURN cHilado2; END $body$ LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER COST 100 ; ________________________________ De: Micky Khan <mcanc...@hotmail.com> Enviado: jueves, 28 de diciembre de 2017 22:24 Para: FORO POSTGRES Asunto: Re: Recorrer Tabla/cursor y formar un solo dato Gracias .... Estoy tratando de resolverlo... Si hubiera otra manera te agradecería.... <_> (o o) ( ?? ) <>-<> Micky Khan ________________________________ De: Alvaro Herrera <alvhe...@alvh.no-ip.org> Enviado: jueves, 28 de diciembre de 2017 21:57 Para: Micky Khan Cc: FORO POSTGRES Asunto: Re: Recorrer Tabla/cursor y formar un solo dato Micky Khan escribió: > 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 || '/' ; Este problema es simple --- te falta el paréntesis que cierra el CAST. es decir estas líneas > 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 ; deberían ser > 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 ; Me parece que hay más problemas en tu código, y me parece que hay una manera más simple de solucionar el requerimiento, pero eso te puedo decir por ahora. -- Álvaro Herrera https://www.2ndQuadrant.com/ [https://www.2ndquadrant.com/static/images/logo.png]<https://www.2ndquadrant.com/> Professional PostgreSQL | 2ndQuadrant<https://www.2ndquadrant.com/> www.2ndquadrant.com Stay in touch with us. Subscribe to our monthly newsletter to hear the latest developments from 2ndQuadrant and related technologies. We’ll also send you any ... PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services