Re: Consulta sobre Trigger NEW / OLD

From: "Dilm E(dot)I(dot)R(dot)L" <i(dot)dilm(at)yahoo(dot)es>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Consulta sobre Trigger NEW / OLD
Date: 2009-07-08 17:13:47
Message-ID: 718209.64302.qm@web28105.mail.ukl.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola. Tu problema no es tanto con las variables NEW y OLD, sino en la lógica que estás usando en tu función para responder a los diferentes eventos. Cuando alguien ejecuta un UPDATE en compras, no deberías introducir un nuevo registro en movimientos, sino actualizarlo. NEW y OLD sólo están inicializados a la vez cuando se trata de un UPDATE, pues te ayuda a conocer el estado actual y futuro del registro. En tu caso, deberías usar NEW para aplicar los cambios a la tabla movimientos, la cual me pregunto si es una copia de la primera y por qué razón lo sería.

Gracias por la respuesta, bueno si movimientos(tabla que recibe el trigger) es una copia de compras, movimientos me sirve para el kardex ya que mi tabla compras y ventas (con estructuras similares) llenan a movimientos por medio del trigger.

Entonces quedaria algo asi...?

BEGIN
  IF (TG_OP = 'INSERT') THEN
 INSERT INTO movimiento (cod_movimiento, fec_movimiento, cod_transaccion, cod_documento, nro_documento, cod_entidad, cod_moneda, tipo_cambio, flag_anulado, fec_update)
    VALUES(NEW.cod_compra, NEW.fec_compra, '01', NEW.cod_documento, NEW.nro_documento, NEW.cod_proveedor, NEW.cod_moneda, NEW.tipo_cambio, NEW.flag_anulado, NEW.fec_update);
  END IF;
 
  IF (TG_OP = UPDATE) THEN

UPDATE movimiento
   SET cod_movimiento= NEW.cod_compra, fec_movimiento = NEW.fec_compra, cod_transaccion = '01', cod_documento = NEW.cod_documento, nro_documento = NEW.nro_documento, cod_entidad = NEW.cod_proveedor, cod_moneda = NEW.cod_moneda, tipo_cambio = NEW.tipo_cambio, flag_anulado = NEW.flag_anulado, fec_update = NEW.fec_update

  END IF;
 
RETURN NEW;

Gracias...

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message B CfaS 2009-07-08 17:18:53 RE: donde esta la BD?
Previous Message Fernando Moreno 2009-07-08 16:55:33 Re: Consulta sobre Trigger NEW / OLD