Creeria yo q la falla esta acá(donde estan los -- aqui), segun el enunciado "necesito detectar si modifica un campo definido, en caso de no hacerlo, este se cambia a nulo.": CREATE OR REPLACE FUNCTION marca_estatus() RETURNS TRIGGER AS $marca_estatus$ -- aqui DECLARE BEGIN IF OLD.estatus = NEW.estatus THEN -- aqui NEW.estatus := null; END IF; RETURN NEW; END; $marca_estatus$ LANGUAGE plpgsql;
>________________________________ > De: Armando Venegas Pérez <venegasp_arma...@hotmail.com> >Para: pgsql-es-ayuda@postgresql.org >Enviado: Jueves 19 de abril de 2012 11:45 >Asunto: [pgsql-es-ayuda] ¿Como detecto si un UPDATE modifica un campo en >especifico? > > > >Buen dia comunidad. > >Al ejecutar un UPDATE necesito detectar si modifica un campo definido, en caso >de no hacerlo, este se cambia a nulo. > >--Doy más detalles-- > > > >Mi tabla: > >CREATE TABLE retorno >( > id serial NOT NULL, > nombre character varying(10), > edad integer, > estatus character(1), > CONSTRAINT pk_retorno PRIMARY KEY (id) >); > >Mi TRIGGER: > >CREATE TRIGGER marca_estatus BEFORE UPDATE > ON retorno FOR EACH ROW > EXECUTE PROCEDURE marca_estatus(); > >Mi procedimiento: (Entiendo que esto es lo que debo de modificar) > >CREATE OR REPLACE FUNCTION marca_estatus() RETURNS TRIGGER AS >$marca_incorporacion$ > DECLARE > BEGIN > IF OLD.estatus != NEW.estatus THEN > NEW.estatus := null; > END IF; > RETURN NEW; > END; >$marca_estatus$ LANGUAGE plpgsql; > >Mis requerimientos: > >Si ejecuto: >UPDATE retorno SET nombre='Alberto' WHERE id=6; > >En la tabla el campo estatus debe ser: >NULL > >--------------------- > >Si ejecuto: >UPDATE retorno SET nombre='Albert', edad=15 WHERE id=6; > >En la tabla el campo estatus debe ser: >NULL > >---------------------- > >Si ejecuto: >UPDATE retorno SET nombre='Alberto', estatus='A' WHERE id=6; > >En la tabla el campo estatus debe ser: >'A' > >--------------------- > >Si ejecuto: >UPDATE retorno SET estatus='E' WHERE id=6; > >En la tabla el campo estatus debe ser: >'E' > >---------------------- > > > >GRACIAS > >Nota: estoy usando Postgres 8.4 en linux > > > > > >