Re: Crear función con un FOR

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

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.

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.

Muchas gracias por contestar y siento no haberme explicado con claridad.

Miguel Rodríguez Penabad escribió::
> El día 16 de junio de 2008 13:58, el-PRiNCiPiTo
> <el-PRiNCiPiTo(at)terra(dot)es> escribió:
>
>> Hola a todos.
>> Voy a explicar lo que quiero hacer y la idea que tengo, a ver si alguien me
>> puede decir cual es el mejor camino para solucionarlo..
>>
>> Quiero que al insertar o actualizar una fila de una tabla busque en otra
>> tabla si hay alguna fila igual y de ser así que modifique dicha fila.
>>
>
> Esto lo puedes hacer (de hecho, lo estás intentando) con un trigger
> for each row,
> pero no es necesario recorrer filas.
>
> El trigger se dispara por cada fila de TABLA1 que insertes, y en la función
> puedes acceder al registro "NEW" que es la fila que estás insertando, o los
> valores nuevos si la estás actualizando.
>
> Por lo tanto:
>
>
>> TABLA1: idTabla1 idCompara1 idCompara2
>> TABLA2: idTabla2 idCompara1 idCompara2 idModifica
>>
>> CREATE TRIGGER t-comparar
>> BEFORE INSERT OR UPDATE
>> ON TABLA1
>> FOR EACH ROW
>> EXECUTE PROCEDURE f-comparar();
>>
>
> Esto está correcto.
> La función sería algo como:
> CREATE OR REPLACE FUNCTION f-comparar()
> RETURNS trigger AS
> $$
> BEGIN
> 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í
> return new;
> END;
> $$
> LANGUAGE plpgsql VOLATILE;
>
> Como ves, no hay que "recorrer filas" sino lanzar el update.
> Si no verifica la condición, no actualizará ninguna fila. No sé si te sirve,
> si no es así podrías indicar exactamente la modificación a realizar y la
> condición que debe verificarse.
>
> saludos
>
>
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Sonia Perez Peña 2008-06-16 18:22:36 sobre funcion Password
Previous Message Alvaro Herrera 2008-06-16 16:42:24 Re: Bloqueo pg_dump