2010-12-06 51 views
1

所以,我有表foo,我想,當觸發t_foo火災刪除其他foo行:ORA-04091 - 如何更改觸發器觸發的表?

CREATE OR REPLACE TRIGGER "t_foo" AFTER INSERT OR DELETE OR UPDATE ON foo 

/*delete some other records from foo that are not :NEW.* or :OLD.* \* 

我怎麼會去這樣做沒有得到一個ORA-04091:表名的變異,觸發/功能可能看不到它。這甚至有可能嗎?

+0

你想在觸發器中改變表的結構嗎?我是否正確閱讀? – HLGEM 2010-12-06 14:00:40

+0

對不起,我的意思是改變foo的行數,而不是結構...我會編輯 – Shawn 2010-12-06 14:01:51

回答

8

爲什麼不在存儲過程中這樣做,您可以在事務中包裝插入和刪除,並且可以清楚地記錄這種副作用行爲?

+0

所以你要說刪除邏輯存儲在存儲過程中,並從這個觸發器調用它? – Shawn 2010-12-06 14:07:33

2

這基本上意味着您的表中存在相互依賴的行,可能是一個帶有從列到主鍵的自引用的層次結構。你有沒有想過ON DELETE CASCADE