¿Como detecto si un UPDATE modifica un campo en especifico?

From: Armando Venegas Pérez <venegasp_armando(at)hotmail(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: ¿Como detecto si un UPDATE modifica un campo en especifico?
Date: 2012-04-19 16:45:03
Message-ID: BAY164-W5185A193D1C1377B002223F73D0@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


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

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2012-04-19 17:46:49 Re: [pgsql-es-ayuda] ¿Como detecto si un UPDATE modifica un campo en especifico?
Previous Message Alejandro Carrillo 2012-04-19 03:51:57 Re: Consultar con Crosstab