From: | "postgres Emanuel CALVO FRANCO" <postgres(dot)arg(at)gmail(dot)com> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: trigger para actualización de datos con otra tabla |
Date: | 2008-10-28 19:05:43 |
Message-ID: | f205bb120810281205rb22d5fcx7af5d1125a9792e@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
NEW.cod_pais = select paises.cod_pais
FROM paises
where (provincias.nombre_pais::text = paises.nombre_pais::text);
no sera esto? esta el from solito....
El día 28 de octubre de 2008 15:40, Jenaro Centeno Gómez
<jcenteno(at)aldia(dot)com(dot)mx> escribió:
> 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
>
--
Emanuel Calvo Franco
Syscope Postgresql DBA
BaPUG Member
From | Date | Subject | |
---|---|---|---|
Next Message | postgres Emanuel CALVO FRANCO | 2008-10-28 19:07:05 | Re: Integer con '' para carga masiva |
Previous Message | Alvaro Herrera | 2008-10-28 19:05:13 | Re: Integer con '' para carga masiva |