我有这个触发器
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
列是一个虚拟列,定义为数量和单位价格的乘积。当我输入新的详细信息行时,触发器似乎没有捕捉到新的计算值,即使它是一个after
. 我的问题是:虚拟列表达式的执行与触发器的运行是否冲突?请注意,当我再次将其设置total_price
为普通列时,它返回了正确的值。
我正在使用 Oracle 12c