Estancado con un trigger en PostgreSQL

From: hernan zapata <hazapata(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Estancado con un trigger en PostgreSQL
Date: 2010-03-02 16:46:13
Message-ID: c852fe6f1003020846y27209022gd0e98007f6d9550@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Cordial saludo comunidad
Les escribo porque no he podido encontrar quien me pueda ayudar con este
trigger, y yo estoy cansando de ensayar de una y otra forma, y mirando la
documentacion de postgres.
Si es posible me gustaria que miraran el codigo que les pongo y me digan
como hago para hacer lo que necesito hacer. El codigo esta abajo.
Basicamente lo que necesito hacer es que cuando el campo
"fk_codigo_familiar_que_puede_ser_beneficiario" de la tabala "beneficiario",
se le inserte un dato (este campo es una clave foranea), este dato tambien
se actualice en otra tabla que se llama "parentesco_familiar" y el campo que
se actualizaria en esta tabla seria
"fk_codigo_familiar_que_es_beneficiario_relacion_lado1" ó
"fk_codigo_familiar_que_es_beneficiario_relacion_lado2", dependiendo si se
cumple la condición en el UPDATE. EL problema es que esa actualización nunca
se hace, y de verdad he hecho mucho intentos haciendolo de diferentes
maneras, este seria un codigo de tantos que tengos, pero este es el que
muestra de manera mas simple lo que deseo hacer.
Agradecería mucho su colaboración porque la verdad estoy estancado con
esto....

CREATE FUNCTION actualizacion_estado_familiar_en_parentesco() RETURNS
trigger AS $beneficiario$

BEGIN

IF (TG_OP = 'UPDATE')THEN
IF((OLD.fk_codigo_familiar_que_puede_ser_beneficiario)<>
(NEW.fk_codigo_familiar_que_puede_ser_beneficiario))THEN

RAISE EXCEPTION 'Un Familiar puede pasar a ser un Beneficiario, pero
un Beneficiario no puede pasar a ser un Familiar';

RETURN NULL;
END IF;
RETURN NEW;
ELSIF(TG_OP = 'INSERT') THEN
UPDATE parentesco_familiar SET
fk_codigo_beneficiario_relacion_lado1 =
NEW.codigo_beneficiario
WHERE fk_codigo_familiar_que_es_beneficiario_relacion_lado1 =
NEW.fk_codigo_familiar_que_puede_ser_beneficiario;

UPDATE parentesco_familiar SET
fk_codigo_beneficiario_relacion_lado2 =
NEW.codigo_beneficiario
WHERE fk_codigo_familiar_que_es_beneficiario_relacion_lado2 =
NEW.fk_codigo_familiar_que_puede_ser_beneficiario;

END IF;
RETURN NEW;
END;
$beneficiario$ LANGUAGE plpgsql;

CREATE TRIGGER actualizacion_estado_familiar_en_parentesco AFTER INSERT OR
UPDATE ON beneficiario
FOR EACH ROW EXECUTE PROCEDURE
actualizacion_estado_familiar_en_parentesco();
--
Hernan Zapata Alzate
Estudiante de Ingeniería de Sistemas
Universidad Nacional de Medellín

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jesus Maria Zabaleta Franco 2010-03-02 16:54:16 Terremoto en Chile
Previous Message Fernando Hevia 2010-03-02 15:33:55 RE: Ayudo con configuracion para rendimiento de PostgreSQL 8.1.11