1
我有这样的触发甲骨文触发产生错误的数据
create or replace trigger upd_totprc_trg
after insert or update or delete of total_price on sales_detail
for each row
declare
v_diff number := 0;
v_master number;
begin
if inserting then
v_master := :new.master_id;
v_diff := :new.total_price;
elsif updating then
v_master := :new.master_id;
v_diff := :new.total_price - :old.total_price;
elsif deleting then
v_master := :old.master_id;
v_diff := :old.total_price * -1;
end if;
update sales_master
set value = value + v_diff
where id = v_master;
end;
/
它计算在sales_detail.total_price
的变化和更新sales_master.value
。
问题是total_price
列是定义为数量和unit_price的乘积的虚拟列。 当我输入新的细节行时,触发器似乎不会捕获新的计算值,即使它是after
。我的问题是:虚拟列表达式的执行与触发器的运行冲突吗?请注意,当我将total_price
再次设置为正常列时,它会返回正确的值。
我使用的是Oracle 12c中