2009-11-12 41 views
1

我想創建一個觸發器,插入某個表之後會被觸發,讓我們說用戶。 在這個觸發器中,我想從表用戶中選擇一些記錄,除了這個我插入到表中,但然後我收到關於變異表的錯誤。是否有可能從該表中獲取記錄?突變表的問題

+0

您能否發佈錯誤代碼? – 2009-11-12 13:08:35

+0

ORA-04091:表名正在變異,觸發器/函數可能看不到它 – szaman 2009-11-12 13:54:00

+0

您能發佈觸發器代碼嗎?它想做什麼? – 2009-11-12 14:14:16

回答

8

自治事務的方法是一種解決方法這一點,但並沒有解決其他一些基本問題。

這種方法的主要問題是,當多個修改同時發生到一個表,然後觸發的觸發器看不到其他修改的結果。因此,從觸發器代碼獲得的結果可能不正確。

例如,如果您在「客戶訂單」表上有一個觸發器,用於維護客戶表中的「客戶總訂單」列,則同時放置的兩個訂單不能看到彼此。他們每個人都嘗試更新「客戶總訂單」,其總額不包括其他訂單。

由於這個原因和其他原因,爲業務邏輯使用觸發器或維護其他表數據通常被認爲是不好的做法。

-5

使在一個自治事務觸發器運行(獨立的交易)

create or replace trigger xxx 
before .... on ..... 

declare 
..... 

pragma autonomous transaction; 
begin 
.....your code..... 
end; 

問候
ķ

+4

-1自動交易不應該輕微使用,或者確實用於記錄之外的任何事情。如果不知道他們想要達到的具體內容,那麼給予某人肯定是一個不好的建議。 – APC 2009-11-12 15:21:24

+0

既然你接受了這一點,我相信你正在尋找一個快速解決方案,你不知道你可以用AT來完成這項工作。不知道自治交易,你可能也錯過了其他進口的東西。我的建議是:即使您現在使用AT,也請自己幫忙,並閱讀其他方法/意見。請參閱下面的答案 – 2009-11-12 18:41:50

4

套用湯姆Kyke:

時,我打一個變異表錯誤,我有我的邏輯了嚴重的致命缺陷。

這是一個相當複雜的問題。有多種解決方案,但最好是改變你的邏輯,以免遇到這樣的錯誤。可以找到here。關於詢問湯姆,還有更多的討論,搜索它們並閱讀它們。你會獲得一些非常有價值的知識。