Re: Crear función con un FOR

From: Miguel Rodríguez Penabad <penabad(at)gmail(dot)com>
To: el-PRiNCiPiTo <el-PRiNCiPiTo(at)terra(dot)es>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Crear función con un FOR
Date: 2008-06-16 22:18:56
Message-ID: 95335e4e0806161518l5f14d018yb1a8de598b4d288b@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El día 16 de junio de 2008 18:48, el-PRiNCiPiTo
<el-PRiNCiPiTo(at)terra(dot)es> escribió:
> Muchas gracias por contestar.
>
> Lo que me has dicho no es exactamente lo que estoy intentando hacer. Creo
> que no lo he explicado muy bien porque no he dicho cual es el motivo de que
> yo quiera "recorrer las filas".
> Yo estoy más acostumbrado a programar en otros entornos y entonces mi idea
> es la siguiente:
> Con un select limito las filas en las que se va a actuar a las que a mi me
> interesa (esto de la tabla dos, la que recibe los cambios)
> Con el for iría pasando por esas filas en las que si quiero actuar y
> cuando una cumpla la condición que le ponga, la actualiza y luego sale del
> for, osea que deja de mirar el resto de filas ya que solo quiero cambar una
> y no todas aunq también cumplan las condiciones.

Creo que este es el problema: Venir de un "entorno de programación" y
tratar de hacer las cosas en bases de datos de la misma forma.

> Para ser mas claro voy a explicar lo que tiene que hacer realmente. Yo
> tengo una tabla con todos los pedidos y otra en la que inserto la
> producción. Entonces lo que quiero es que cuando inserte o actualice algo en
> la tabla producción mire en la tabla pedidos si hay algún pedido de ese
> producto y de ser así que lo marque como fabricado. Entonces se puede dar el
> caso de que tenga varios pedidos del mismo producto y que fabrique una
> unidad, yo no quiero marcar todos lospedidos como fabricados si no el
> primero que encuentre.
>

El problema que yo veo es: ¿cual de los pedidos marcas como fabricado?
¿uno al azar? yo al menos no le veo sentido, es mas, lo veo erróneo.
Si los pedidos estuviesen ordenados por algún criterio, podrías usar la opción
que yo te decía, usar un update pero algo parecido a

update tabla2
set idmodifica = 1 --no se como quieres modificar
where idCompara1=NEW.idCompara1
and idCompara2= NEW.idCompara2 --no se si la condición es así
and campoordenacion = (select min(campoordenacion) from tabla2
where idCompara1=NEW.idCompara1
and idCompara2= NEW.idCompara2)
Quizás haya otra alternativa más simple, no sé, pero así sólo actualizaríamos
el primer pedido que cumpla la condición.

Si, de todas formas, quieres seguir "recorriendo filas", podrías
declarar un cursor
y hacer un "update... where current of..", que se está comentando en
otro hilo de la lista.
Después de hacer ese update haces un "return new;" y ya saldría de la
función sin
modificar nada más. Pero en mi opinión ES UNA MALA OPCIÓN. Quizás
deberías revisar
el diseño de la bd.

Saludos
--
Miguel Rodríguez Penabad

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2008-06-16 22:48:03 Re: RE: [pgsql-es-ayuda] No parar aplicación en vacuum full
Previous Message Marcelino Guerrero (GMail) 2008-06-16 22:09:12 RE: [pgsql-es-ayuda] No parar aplicación en vacuum full