0

我有以下触发器,但它不起作用,我没有收到任何错误,它根本不起作用。

CREATE OR REPLACE TRIGGER PROYECTO.ACTUALIZAPRECIOSTOTALFACTURA
AFTER INSERT
ON PROYECTO.DOCUMENTOS_DETALLE
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
BEGIN
    update DOCUMENTOS
    set doc_total=doc_total+:new.doc_det_precio
    where doc_numero = :new.doc_numero;
END;

如果我删除“where”条件,它确实有效,但不是我需要的方式(它在 documentos.doc_total 上添加 doc_det_precio,但总是在我在 DOCUMENTOS 表上的第一条记录中。我应该做错什么?

表是:
DOCUMENTOS
DOC_numero
DOC_total

DOCUMENTOS_DETALLE
DOC_DET_id
DOC_numero
DOC_DET_precio

4

1 回答 1

0

你的where条款应该是:

where doc_numero = :new.doc_det_doc_numero;

您可能还想重新考虑尝试使总和在主表上保持最新。它很容易失去同步。通常在需要时只计算总数更合适:

select m.doc_numero
      ,sum(d.doc_det_precio) as doc_total
  from documentos m
  join documentos_detalle d on (d.doc_numero = m.doc_numero)
  group by m.doc_numero
于 2013-11-11T01:59:04.670 回答