【发布时间】:2017-02-06 04:44:18
【问题描述】:
我有这个触发器
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
【问题讨论】:
标签: oracle triggers oracle12c virtual-column