Pues creo q es el mismo ejemplo q pusiste, con el comparador q Jaime te propuso:
CREATE OR REPLACE FUNCTION marca_estatus() RETURNS TRIGGER AS $marca_estatus$ -- aqui DECLARE BEGIN IF IS DISTINCT FROM: new.status IS DISTINCT FROM old.status THEN -- aqui Si la sentencia no define algún valor para "estatus" debo ponerlo como NULL NEW.estatus := null; END IF; RETURN NEW; -- Si la sentencia modifica el campo "estatus" escribo el valor. END; $marca_estatus$ LANGUAGE plpgsql; >________________________________ > De: Armando Venegas Pérez <venegasp_arma...@hotmail.com> >Para: ja...@2ndquadrant.com >CC: pgsql-es-ayuda@postgresql.org >Enviado: Jueves 19 de abril de 2012 13:14 >Asunto: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] ¿Como detecto si un UPDATE >modifica un campo en especifico? > > > >Hola Jaime y a toda la comunidad. > > >Gracias por su tiempo, pero no necesito comparar lo que antes había en la BD >contra lo nuevo. >(El ejemplo que escribí en el PL/PGSQL solo es como referencia, pues me doy >cuenta que eso no me sirve) > >Necesito validar explícitamente el QUERY (la sentencia del UPDATE). >Si la sentencia modifica el campo "estatus" escribo el valor. >Si la sentencia no define algún valor para "estatus" debo ponerlo como NULL. > > > >Ejemplo: (En todos los casos NO IMPORTA el valor que antes había en el campo >"estatus") > >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 nombre='Alberto' WHERE id=6; > >En la tabla el campo estatus debe ser: >NULL > >--------------------- > >Si ejecuto: >UPDATE retorno SET nombre='Alberto', estatus='E' WHERE id=6; > >En la tabla el campo estatus debe ser: >'E' > >--------------------- > >Si ejecuto: >UPDATE retorno SET estatus='I' WHERE id=6; > >En la tabla el campo estatus debe ser: >'I' > >--------------------- > >Gracias y saludos > > >> From: ja...@2ndquadrant.com > >> Date: Thu, 19 Apr 2012 12:46:49 -0500 >> Subject: Re: [pgsql-es-ayuda] ¿Como detecto si un UPDATE modifica un campo >> en especifico? >> To: venegasp_arma...@hotmail.com >> CC: pgsql-es-ayuda@postgresql.org >> >> 2012/4/19 Armando Venegas Pérez <venegasp_arma...@hotmail.com>: >> > Buen dia comunidad. >> > >> > Al ejecutar un UPDATE necesito detectar si modifica un campo definido, en >> > caso de no hacerlo, este se cambia a nulo. >> > >> >> necesitas usar IS DISTINCT FROM: new.status IS DISTINCT FROM old.status >> no basta con != por que en el caso de que el estatus este en NULL >> evaluar "new.status != old.status" dara como resultado NULL que no es >> true ni false asi que no ejecuta nada del IF >> >> -- >> Jaime Casanova www.2ndQuadrant.com >> Professional PostgreSQL: Soporte 24x7 y capacitación > > >