我試圖創建一個插入觸發器,該插入器觸發器將購買的詳細信息插入購買日誌表中,並且還更新購買表中的總費用列將GCT總計增加16.5%。這兩個表有這些列:插入到具有後插入觸發器的表中時出現「表正在變異」錯誤
CREATE TABLE purchases
(
p_Id INTEGER PRIMARY KEY,
product VARCHAR(25) ,
quantity INTEGER ,
unit_Cost FLOAT ,
total_Cost FLOAT
);
CREATE TABLE purchases_log
(
event_Date DATE ,
p_Id INTEGER PRIMARY KEY,
description varchar(75)
);
我試圖使用觸發器是:
CREATE OR REPLACE TRIGGER PURCHASES_AUDIT
AFTER INSERT ON purchases
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE TAX FLOAT;
BEGIN
INSERT INTO purchases_log
VALUES(SYSDATE,:NEW.p_Id,'INSERT INTO PURCHASES TABLE');
tax := 1.165;
UPDATE purchases SET total_Cost = quantity * unit_Cost;
UPDATE purchases SET total_Cost = total_Cost*tax;
END PURCHASES_AUDIT;
/
然而
當試圖運行對購買Oracle表插入給了我這個錯誤
ERROR at line 1:
ORA-04091: table PURCHASES is mutating, trigger/function may
not see it
ORA-06512: at "PURCHASES_AUDIT", line 9
ORA-04088: error during execution of trigger 'PURCHASES_AUDIT'
請幫助
謝謝,請原諒我,但我有點新手。我其實並不完全理解浮動和數字之間的區別。儘管如此,我會對這兩種變量類型進行研究。 – tajay
@tajay - 您可以真實每個開發人員都應該瞭解浮點運算https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html但總而言之,float是一種近似的數據類型。 1 * 0.9可能是0.90000000000001。或者它可能是0.89999999996。它將接近正確的值,但計算機不能準確表示浮點值,因此會累積錯誤。如果你正在進行科學計算,那麼無論如何你都在積累一個誤差項,這不是問題。我從來沒有見過任何人樂意讓貨幣價值不準確。 –
哦,我現在明白了。謝謝 – tajay