2016-04-01 50 views
0

我有一個更好地解釋這種情況的例子。我有一個表A編輯你剛插入的db行

CREATE TABLE A(ID NUMBER, VAL NVARCHAR2(255)) 

,並創建一個觸發器,它確實在它剛插入

CREATE OR REPLACE TRIGGER XXX 
    AFTER INSERT 
    ON A 
    FOR EACH ROW 

DECLARE 

BEGIN 
    UPDATE A SET VAL = 'LOL' WHERE ID = :NEW.ID; 
END; 

行的更新當我執行插入

INSERT INTO A VALUES(1, 'XX') 

我得到

ORA-04091: table name is mutating, trigger/function may not see it 

是否有解決方法?

+1

[插入後觸發更新同桌]的可能的複製(http://stackoverflow.com/questions/26072577/update-same-table-after-insert-trigger) –

+0

該鏈接(一式兩份)問題表明一種方法;但是有一個原因(有點)插入然後更新。在你的虛擬代碼中,爲什麼你想要這樣做,而不是僅僅在插入或插入前觸發器中提供'LOL'。如果你解釋你的實際需求,可能會有更合適或更完整的答案。 –

回答

0

您不需要更新,只需在BEFORE觸發器中分配新值即可。

CREATE OR REPLACE TRIGGER XXX 
    BEFORE INSERT --<< You need a BEFORE trigger for this to work. 
    ON A 
    FOR EACH ROW 
BEGIN 
    :new.val := 'LOL'; 
END; 
+0

這就是我需要的,謝謝! – Phate01

+1

@ Phate01:您應該花時間閱讀Oracle手冊。這裏都記錄在案 –