RE: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] ¿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: 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
Views: Raw Message | Whole Thread | Download mbox | Resend email
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

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Antonio Galicia 2012-04-19 22:32:08 Re: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] ¿Como detecto si un UPDATE modifica un campo en especifico?
Previous Message Alejandro Carrillo 2012-04-19 21:42:11 Re: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] ¿Como detecto si un UPDATE modifica un campo en especifico?