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



                                          

Responder a