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
>
>
>
>
>
>

Responder a