gpt4 book ai didi

oracle - 此行级触发器发生了什么故障?

转载 作者:行者123 更新时间:2023-12-02 01:45:22 24 4
gpt4 key购买 nike

我有这个触发器:

create or replace trigger t_calctotal
after insert or update on item_fornecimento
REFERENCING NEW AS NEW OLD AS OLD
for each row

begin

if inserting then
dbms_output.put_line(' On Insert');
update fornecimento f set f.total_enc_fornec = f.total_enc_fornec +:NEW.prec_total_if where f.id_fornecimento = :NEW.id_fornecimento;

else
dbms_output.put_line(' On Update');
update fornecimento f set f.total_enc_fornec = f.total_enc_fornec - :OLD.prec_total_if +:NEW.prec_total_if where f.id_fornecimento = :NEW.id_fornecimento;

end if;

end;

基本上,我想通过对 item_fornecimento 中的所有项目求和来刷新订单 (fornecimento) 的总值(value);我必须以不同的方式处理这个问题,如果是插入,如果是更新。触发器编译并全部工作,甚至工作过一次,但这是唯一的一次。我已在 sqldeveloper 中的 item_fornecimento 中插入或更新了我的 prec_total_if,但订单 (fornecimento) 总数仍然没有改变:(。

如果它很重要,我的 f.total_enc_fornec 将为空,直到它被此触发器插入的值替换为止;它打印了输出,但似乎更新失败。

最佳答案

让你知道:null + 123 = null

我想这可以解释它。将总数初始化为 0,一切都应该正常。

编辑

你可以这样做:

if inserting then
dbms_output.put_line(' On Insert');
update fornecimento f set f.total_enc_fornec = nvl(f.total_enc_fornec, 0) +:NEW.prec_total_if where f.id_fornecimento = :NEW.id_fornecimento;

else
dbms_output.put_line(' On Update');
update fornecimento f set f.total_enc_fornec = nvl(f.total_enc_fornec, 0) - :OLD.prec_total_if +:NEW.prec_total_if where f.id_fornecimento = :NEW.id_fornecimento;

end if;

关于oracle - 此行级触发器发生了什么故障?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2112284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com