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

Re: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] ¿Como detecto si un UPDATE modifica un campo en especifico?

From: Alejandro Carrillo <fasterzip(at)yahoo(dot)es>
To: Armando Venegas Pérez <venegasp_armando(at)hotmail(dot)com>, "jaime(at)2ndquadrant(dot)com" <jaime(at)2ndquadrant(dot)com>
Cc: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] ¿Como detecto si un UPDATE modifica un campo en especifico?
Date: 2012-04-19 21:42:11
Message-ID: 1334871731.51711.YahooMailNeo@web171005.mail.ukl.yahoo.com (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
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_armando(at)hotmail(dot)com>
>Para: jaime(at)2ndquadrant(dot)com 
>CC: pgsql-es-ayuda(at)postgresql(dot)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: jaime(at)2ndquadrant(dot)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_armando(at)hotmail(dot)com
>> CC: pgsql-es-ayuda(at)postgresql(dot)org
>> 
>> 2012/4/19 Armando Venegas Pérez <venegasp_armando(at)hotmail(dot)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
>
>
>

In response to

Responses

pgsql-es-ayuda by date

Next:From: =?iso-8859-1?B?QXJtYW5kbyBWZW5lZ2FzIFDpcmV6?=Date: 2012-04-19 21:47:45
Subject: RE: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] ¿Como detecto si un UPDATE modifica un campo en especifico?
Previous:From: Alvaro HerreraDate: 2012-04-19 21:06:45
Subject: RE: Consultar con Crosstab

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