Re: Recorrer Tabla/cursor y formar un solo dato

From: Micky Khan <mcanchas(at)hotmail(dot)com>
To: FORO POSTGRES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Recorrer Tabla/cursor y formar un solo dato
Date: 2017-12-28 23:10:21
Message-ID: AM4P190MB0225530E66C681CB073B2787D7040@AM4P190MB0225.EURP190.PROD.OUTLOOK.COM
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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 <mcanchas(at)hotmail(dot)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 <alvherre(at)alvh(dot)no-ip(dot)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

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2017-12-29 02:55:12 Re: Recorrer Tabla/cursor y formar un solo dato
Previous Message Micky Khan 2017-12-28 22:24:48 Re: Recorrer Tabla/cursor y formar un solo dato