Tuesday, June 17, 2008

Re: [pgsql-es-ayuda] Crear función con un FOR

Muchas gracias a todos por contestar.
La idea no es marcar uno al azar si no que el select que me filtra en la
tabla de los pedidos ya deja en los que me interesa marcarlo, los mas
urgentes, asi que creo que con las ideas que me habéis dado ya puedo
ordenarlas y sacar lo que necesito, muchas gracias.
En cuanto lo tenga funcionando pongo la solución por si le sirve a
alguien y para ver que os parece.

Gracias.

Miguel Rodríguez Penabad escribió::
> El día 16 de junio de 2008 18:48, el-PRiNCiPiTo
> <el-PRiNCiPiTo@terra.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
>

--
TIP 4: No hagas 'kill -9' a postmaster

No comments: