Re: trigger para actualización de datos con otra tabla

From: Jenaro Centeno Gómez <jcenteno(at)aldia(dot)com(dot)mx>
To: Gabriel Messner <gabmessner(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: trigger para actualización de datos con otra tabla
Date: 2008-10-28 17:40:51
Message-ID: 1225215651.9659.22.camel@sistemas-lnx
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

No me parece muy lógico lo que estás haciendo, no sería mejor que
crearas un fk de la tabla provincias en este caso, hacia la tabla
países, incluyendo solamente el campo identifiador del país en la tabla
provincia ?

O quizá no entendí bien, ¿ Existe algún motivo por el que necesites
repetir los datos de la tabla paises en la tabla provincias?

Saludos.

El mar, 28-10-2008 a las 18:26 +0100, Gabriel Messner escribió:
> Tengo dos tablas 'paises' y 'provincias' las dos con un campo común
> 'pais'
>
> Necesito diseñar un trigger (lo pego abajo) que cuando inserte una
> nueva tupla en la tabla 'provincias' cubra el campo 'pais' se cubra el
> código de país con los datos contenidos en la tabla 'paises'.
>
> El problema aparece cuando inserto desde el formulario un nuevo
> registro. Me devuelve un mensaje de error: Query failed: ERROR:
> missing FROM-clause entry for table "provincias".
>
> Creo que no estoy definiendo bien la función. Cualquier ayuda será de
> agradecer.
>
> CREATE OR REPLACE FUNCTION update_provincias RETURNS trigger AS --
> trigger indica que el tipo de dato devuelto es un trigger.
> $update_cdconc$
> BEGIN
> IF (TG_OP = 'INSERT') THEN
>
> NEW.cod_pais = paises.cod_pais
> FROM paises
> where (provincias.nombre_pais::text = paises.nombre_pais::text);
> RETURN NEW;
>
> END IF;
> IF (TG_OP = 'UPDATE') THEN
> IF (OLD.nombre_pais != NEW.nombre_pais) THEN --
> OLD, NEW son parámetros de la función: no tocar
>
> NEW.cod_pais = paises.cod_pais
> FROM paises
> where (provincias.nombre_pais::text = paises.nombre_pais::text);
> RETURN NEW;
> ELSE RETURN NEW;
> END IF;
> END IF;
>
> END;
> $update_provincias$ LANGUAGE plpgsql;
>
> DROP TRIGGER IF EXISTS update_provincias ON provincias;
>
> CREATE TRIGGER update_provincias BEFORE INSERT OR UPDATE ON provincias
> -- aa_plans.fichasplan: tabla sobre la que se ejecuta el trigger
> FOR EACH ROW EXECUTE PROCEDURE update_provincias();
> --update_centroides_geom() es la función declarada arriba

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Agustin 2008-10-28 18:09:07 Re: Integer con '' para carga masiva
Previous Message Gabriel Messner 2008-10-28 17:26:13 trigger para actualización de datos con otra tabla