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