Re: duda con función

From: jlcambero <jlcambero(at)emergya(dot)es>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: duda con función
Date: 2007-11-19 12:16:41
Message-ID: 200711191316.41698.jlcambero@emergya.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El Sábado, 17 de Noviembre de 2007 14:27, Aarón Ribas Núñez escribió:
> Hola muy buenas! Tengo una pequeña duda con respecto a una función que
> estoy intentando implementar. Mi función en cuestión es la siguiente:
>
>
>
> CREATE OR REPLACE
> FUNCTION esborra()
>
> RETURNS setof record
>
> LANGUAGE 'plpgsql' AS'
>
> DECLARE
>
> aux record;
>
> aux2 record;
>
> BEGIN
>
> SELECT INTO aux2 * from lliurament
> ll inner join grup_lliura_ex gle on ll.id_lliurament = gle.id_lliuram
> and ll.id_exer = gle.id_exer;
>
>
>
> FOR aux IN SELECT id_grup,
> ll.id_exer, MAX(nota_lliur) AS nota
> FROM lliurament ll
> INNER JOIN grup_lliura_ex gle ON ll.id_lliurament = gle.id_lliuram
>
> AND ll.id_exer = gle.id_exer
> GROUP BY ll.id_exer, id_grup
> ORDER BY id_grup ASC LOOP
>
> DELETE FROM lliurament WHERE
> aux.nota != aux2.nota_lliur AND aux.id_grup = aux2.id_grup AND
> aux.id_exer = aux2.id_exer;
>
> RETURN NEXT aux;
>
> END LOOP;
>
> RETURN;
>
> END;';
> Como ven, estoy metiendo en 2 records, una serie de datos, y lo que quiero
> hacer con ellos, es ir comparando cada una de las filas de uno con las del
> otro, y si se cumple cierta condición(la del DELETE) pues que borre una
> fila de la tabla lliurament.Mi problema está en que cuando se produce el
> primer DELETE del bucle, el record aux no sigue iterando, es como si al
> borrar la fila de la tabla lliurament, no encontrase la siguiente fila de
> aux y entonces, sale del bucle.Una de las soluciones que he pensado es,
> hacer SELECT INTO aux .... y SELECT INTO aux2 ... fuera de los bucles, y
> luego iterar sobre aux y aux2, pero no sé si se puede, o al menos no sé
> como iterar sobre un record si no es de la manera que lo hago, debería ser
> algo como...
>
> FOR aux LOOP
> DELETE ....
> EXIT WHEN ( condicion)
> RETURN NEXT aux;
> END LOOP;
>
> esto existe?
>
> Otra opción quizá sería hacer tablas intermedias, pero no lo he probado, ya
> que tampoco lo he hecho nunca.
>
> Bueno, gracias de antemano.
> Saludos!
>
>
>
> _________________________________________________________________
> Express yourself instantly with MSN Messenger! Download today it's FREE!
> http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/

creo que puede hacer con un delete, sin necesidad de complicarse tanto!

Un saludo

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2007-11-19 13:18:19 Re: Preocupacion con PostgreSQL
Previous Message Rodriguez Fernando 2007-11-19 11:28:29 Re: help postgreSql