Skip site navigation (1) Skip section navigation (2)

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

From: =?iso-8859-1?B?QXJtYW5kbyBWZW5lZ2FzIFDpcmV6?=<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 (view raw or flat)
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

pgsql-es-ayuda by date

Next:From: Jaime CasanovaDate: 2012-04-19 17:46:49
Subject: Re: [pgsql-es-ayuda] ¿Como detecto si un UPDATE mod?==?ISO-8859-1?Q?ifica un campo en especifico?
Previous:From: Alejandro CarrilloDate: 2012-04-19 03:51:57
Subject: Re: Consultar con Crosstab

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group