Re: Grupos en un DataReport

From: "Alberto" <alberto(dot)ipt(at)telefonica(dot)net>
To: "Alvaro Herrera" <alvherre(at)surnet(dot)cl>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Grupos en un DataReport
Date: 2005-06-20 10:45:45
Message-ID: 011f01c57585$4266ca20$0964a8c0@Alberto
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Alvaro,
Después de intentar resolver en el visual basic mi problemática me puse con
tu propuesta. Nunca había creado funciones y después de mirarme tutoriales y
ejemplos ( y siguiendo tu esquema como ayuda) he realizado la siguiente
función:

CREATE FUNCTION tst() RETURNS SETOF RECORD AS '
DECLARE
rec record;
prev record;
BEGIN
prev.idproveedor=null;
FOR rec IN SELECT INTO rec * FROM articulos LOOP
IF rec.idproveedor = prev.idproveedor THEN
rec.idproveedor=null;
END IF;
prev.idproveedor=rec.idproveedor;
RETURN NEXT rec;
END LOOP;
END;
' LANGUAGE plpgsql;

Al ejecutarla de la forma:

SELECT * FROM tst();

me sale el siguiente error:
ERROR: a column definition list is required for functions returning
"record"

Seguro que es una tonteria, pero no veo donde tengo el error.
Gracias.
--
Alberto

----- Original Message -----
From: "Alvaro Herrera" <alvherre(at)surnet(dot)cl>
To: "Alberto" <alberto(dot)ipt(at)telefonica(dot)net>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Wednesday, June 15, 2005 5:49 PM
Subject: Re: [pgsql-es-ayuda] Grupos en un DataReport

On Wed, Jun 15, 2005 at 01:58:48PM +0200, Alberto wrote:

Hola,

> Lo primero decir que no se si este es el foro mas adecuado a mi
> consulta y si no es así disculpas.

Si, lo es.

> Un ejemplo de lo que quiero es lo siguiente:
>
> Lo que tengo ahora:
>
> ProveedorA Articulo1
> ProveedorA Articulo2
> ProveedorB Articulo3
>
> Y lo que quiero es lo siguiente:
>
> ProveedorA Articulo1
> Articulo2
> ProveedorB Articulo3

Hum, raro. La verdad no se como se haria en Postgres. Creo que lo mas
sencillo seria hacerlo en la aplicacion cliente, si es posible (en
cualquier lenguaje normal se puede, pero si es en uno de esos lenguajes
visuales en que enchufas la salida de SQL a un elemento grafico, puede
ser complicado o imposible).

Ahora que lo pienso, si se puede hacer -- solo tienes que hacer una
funcion que haga la consulta, y recorra el resultado, de manera que
reemplace el valor de la primera columna por NULL si es que el valor es
igual al del registro anterior. Algo como

FOR SELECT INTO rec ... LOOP
if rec.proveedor = prev.proveedor then
rec.proveedor = null;
end if;
prev.proveedor = rec.proveedor;
return next rec;
end loop;

Tienes que crear una funcion que retorne SETOF RECORD. Se ha discutido
antes como se hace esto -- mira los archivos.

--
Alvaro Herrera (<alvherre[a]surnet.cl>)
Management by consensus: I have decided; you concede.
(Leonard Liu)

---------------------------(fin del mensaje)---------------------------
TIP 3: si publicas/lees desde Usenet, por favor envía "subscribe-nomail"
a majordomo(at)postgresql(dot)org para que tus mensajes puedan llegar
a los suscriptores de la lista

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Walter Osoria 2005-06-20 11:31:17 no leer ...
Previous Message Pere Rodríguez 2005-06-20 08:13:26 Re: Herramienta de monitorización