Re: mi primer trigger

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Ever Daniel Barreto Rojas <ebarreto(at)nexusit(dot)com(dot)py>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: mi primer trigger
Date: 2007-10-16 19:46:03
Message-ID: 20071016194603.GC13400@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Ever Daniel Barreto Rojas escribió:
> miguel:
>
> El 16/10/2007 a las 02:36 p.m., escribiste:
> > CREATE OR REPLACE FUNCTION "public"."salida_hilos" () RETURNS trigger AS
> > $body$
> > BEGIN
> > update vihilos2 set peso_salida = peso_salida + new.peso_neto
> > where idvihilo = new.idvihilo And itemvi = new.itemvi;
> > RETURN NULL;
> > END;
> > $body$
> > LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
>
> digo yo... no deberías de hacer RETURN NEW en vez de RETURN NULL?

No, porque es un trigger AFTER. En un trigger AFTER, el valor de
retorno es ignorado (a diferencia de un trigger BEFORE, en el cual el
valor de retorno es la tupla que se insertará en la tabla, en el caso de
un trigger BEFORE INSERT).

Sin embargo ese es precisamente el problema del trigger. En vez de un
trigger AFTER, deberia estar usando un trigger BEFORE. Y en vez de
hacer un UPDATE, deberia estar modificando NEW. O sea algo asi como

NEW.peso_salida = NEW.peso_salida + NEW.peso_neto;
RETURN NEW;

Creo.

--
Alvaro Herrera http://www.advogato.org/person/alvherre
"Use it up, wear it out, make it do, or do without"

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Ever Daniel Barreto Rojas 2007-10-16 21:07:43 Re[2]: mi primer trigger
Previous Message MIGUEL CANCHAS 2007-10-16 19:03:04 RE: mi primer trigger