Re: plql and or clausule

From: CS DBA <cs_dba(at)consistentstate(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: plql and or clausule
Date: 2016-05-31 21:50:06
Message-ID: 297e96ad-a001-545c-cb9d-ce37ecbae053@consistentstate.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Try this:

CREATE OR REPLACE FUNCTION lst_tot_mytable_LOG() RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
IF (TG_OP = 'UPDATE') THEN
INSERT INTO lst_tot_mytable_log SELECT 'U', now(), OLD.*;
IF OLD.Peticionario != NEW.Peticionario
or OLD.interlocclte != NEW.interlocclte
or OLD.Equipo != NEW.Equipo
or OLD.RespTecnico != NEW.RespTecnico
or OLD.RespOrganiz != NEW.RespOrganiz THEN
UPDATE lst_tot_mytable set fultimamodificacion = now(),
esmodificadoerspectoaanterior = true
WHERE nropeti = OLD.nropeti;
ELSIF OLD.Peticionario = NEW.Peticionario
or OLD.interlocclte = NEW.interlocclte
or OLD.Equipo = NEW.Equipo
or OLD.RespTecnico = NEW.RespTecnico
or OLD.RespOrganiz = NEW.RespOrganiz THEN
UPDATE lst_tot_mytable set NEW.fultimamodificacion = now(),
NEW.esmodificadoerspectoaanterior = fase
WHERE nropeti = OLD.nropeti;
END IF;
RETURN NULL; -- result is ignored since this is an AFTER trigger
END;
$$;

However if I get your purpose I suspect the ELSIF section may need to be
AND's:

ELSIF OLD.Peticionario = NEW.Peticionario
AND OLD.interlocclte = NEW.interlocclte
AND OLD.Equipo = NEW.Equipo
AND OLD.RespTecnico = NEW.RespTecnico
AND OLD.RespOrganiz = NEW.RespOrganiz THEN

On 05/31/2016 03:18 PM, carlos(at)lpis(dot)com wrote:
>
> CREATE OR REPLACE FUNCTION lst_tot_mytable_LOG() RETURNS trigger
> LANGUAGE plpgsql
> AS $$
> BEGIN
> IF (TG_OP = 'UPDATE') THEN
> INSERT INTO lst_tot_mytable_log SELECT 'U', now(), OLD.*;
> IF OLD.Peticionario != NEW.Peticionario or OLD.interlocclte !=
> NEW.interlocclte or OLD.Equipo != NEW.Equipo or OLD.RespTecnico !=
> NEW.RespTecnico or OLD.RespOrganiz != NEW.RespOrganiz THEN
> UPDATE lst_tot_mytable set fultimamodificacion = now(),
> esmodificadoerspectoaanterior = true WHERE nropeti = OLD.nropeti;
> ELSIF OLD.Peticionario == NEW.Peticionario or OLD.interlocclte ==
> NEW.interlocclte or OLD.Equipo == NEW.Equipo or OLD.RespTecnico ==
> NEW.RespTecnico or OLD.RespOrganiz == NEW.RespOrganiz THEN
> UPDATE lst_tot_mytable set NEW.fultimamodificacion = now(),
> NEW.esmodificadoerspectoaanterior = fase WHERE nropeti = OLD.nropeti;
> END IF;
> RETURN NULL; -- result is ignored since this is an AFTER trigger
> END;
> $$;

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Venkata Balaji N 2016-05-31 22:00:44 Re: Checkpoint Err on Startup of Rsynced System
Previous Message Adrian Klaver 2016-05-31 21:49:54 Re: plql and or clausule