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"
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 |