2017-04-18 55 views
0

我已創建此觸發器,以便在向ORDER_DETAIL表插入一行後,從表中獲取「UNIT_PRICE」 ITEM並將其設置爲基於「ITEM_ID」的ORDER_DETAIL表的「價格」。我對語法有任何錯誤嗎?先謝謝你!如何語法SQL中的觸發器,以便更新同一個表中的列AFTER INSERT(oracle數據庫)

CREATE OR REPLACE TRIGGER PRICETRIG 
AFTER INSERT ON ORDER_DETAIL FOR EACH ROW 
BEGIN 
UPDATE ORDER_DETAIL 
SET ORDER_DETAIL.PRICE=(SELECT ITEM.UNIT_PRICE FROM ITEM WHERE 
ORDER_DETAIL.ITEM_ID=ITEM.ITEM_ID); 
END; 

這就是錯誤:

One error saving changes to table "ORDER_DETAIL": 
Row 8: ORA-04091: table ORDER_DETAIL is mutating, trigger/function 
may not see it 
ORA-06512: at "PRICETRIG", line 2 
ORA-04088: error during execution of trigger 'PRICETRIG' 
ORA-06512: at line 1 

回答

2

你應該是指the NEW pseudorecord,而不是表中的觸發器上。這也應該是一個前-INSERT觸發器,是這樣的:

CREATE OR REPLACE TRIGGER PRICETRIG 
BEFORE INSERT ON ORDER_DETAIL 
FOR EACH ROW 
BEGIN 
    SELECT ITEM.UNIT_PRICE 
    INTO :NEW.ORDER_PRICE 
    FROM ITEM 
    WHERE ITEM.ITEM_ID = :NEW.ITEM_ID; 
END; 

你的原代碼試圖更新表觸發器反對,不只是新插入的行的每一行。

您可能想要檢查您沒有訂單上的數量字段,例如您應該將單位價格乘以單位價格。

相關問題