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

Responder a