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 14:07:40
Message-ID: 95335e4e0806160707l611f1396y1e7feb6a35159658@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 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

--
Miguel Rodríguez Penabad

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2008-06-16 14:43:13 Re: nuevo release
Previous Message Raúl Andrés Duque Murillo 2008-06-16 13:08:18 Re: sobre funcion Password