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: =?iso-8859-1?B?QXJtYW5kbyBWZW5lZ2FzIFDpcmV6?=<venegasp_armando(at)hotmail(dot)com>
To: <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:47:45
Message-ID: BAY164-W18B30B923B9B1C8BE7AA7FF73D0@phx.gbl (view raw or flat)
Thread:
Lists: pgsql-es-ayuda

Hola a todos.

Al ejecutar el QUERY que mencionas abajo, me marca el siguiente error:


ERROR:  syntax error at or near "DISTINCT"
LINE 1: SELECT  IS DISTINCT FROM:  $1  IS DISTINCT FROM  $2 
                   ^
QUERY:  SELECT  IS DISTINCT FROM:  $1  IS DISTINCT FROM  $2 
CONTEXT:  SQL statement in PL/PgSQL function "marca_estatus" near line 4




Gracias

Date: Thu, 19 Apr 2012 22:42:11 +0100
From: fasterzip(at)yahoo(dot)es
Subject: Re: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] ¿Como detecto si un UPDATE modifica un campo en especifico? 
To: venegasp_armando(at)hotmail(dot)com; jaime(at)2ndquadrant(dot)com
CC: pgsql-es-ayuda(at)postgresql(dot)org

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

pgsql-es-ayuda by date

Next:From: Antonio GaliciaDate: 2012-04-19 22:32:08
Subject: Re: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] ¿Como det?==?ISO-8859-1?Q?ecto si un UPDATE modifica un campo en especifico?
Previous:From: Alejandro CarrilloDate: 2012-04-19 21:42:11
Subject: Re: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] ¿Como detecto si un UPDATE modifica un campo en especifico?

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