Oracle Trigger:在表1上插入后更新table2

时间:2013-11-11 01:51:45

标签: oracle triggers sql-update where-clause sql-insert

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

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表上的firt记录中,总是。我应该做什么错?

表格是:
DOCUMENTOS
DOC_numero
DOC_total

DOCUMENTOS_DETALLE
DOC_DET_id
DOC_numero
DOC_DET_precio

1 个答案:

答案 0 :(得分: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