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: [email protected]
Subject: Re: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] ¿Como detecto si un UPDATE 
modifica un campo en especifico? 
To: [email protected]; [email protected]
CC: [email protected]

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 <[email protected]>
 Para: [email protected] 
CC: [email protected] 
 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: [email protected]
> 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: [email protected]
> CC: [email protected]
> 
> 2012/4/19 Armando Venegas Pérez <[email protected]>:
> > 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
                                          


                                          

Responder a