Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group