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
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 |