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中