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
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 |