2012-06-13 65 views
1

我們正在使用Oracle 10 DB,它使用多個觸發器從用作主鍵的序列檢索值。其中一個觸發器是已禁用但它似乎仍在觸發,因爲表中的記錄已成功插入有效的主鍵。禁用觸發器仍在工作

這怎麼可能?爲什麼「插入前」觸發器仍在工作,雖然它被禁用了?

+3

1-你確定它被禁用?你是否從user_triggers查詢了'select status = where'trigger_name ='THE_TRIGGER_NAME''? 2-你確定沒有其他觸發器可以做到嗎?你可以嘗試'alter table TABLE_NAME禁用所有觸發器嗎? 3-你如何插入記錄?作爲一個簡單的'插入語句'? –

+2

機會是你的插入語句可能直接調用序列。否則就是A.B.Cade所說的。 –

+0

感謝您的回答!這很簡單:就像Jeffrey Kemp注意到查詢直接調用序列。 – Nick

回答

2

我認爲只有當插入語句不提供一個(PK爲空)時,觸發器纔會調用序列來獲取PK值。插入的應用程序可能會調用序列併爲PK提供值。

也許你可以通過在表中插入一條PK值爲null的測試。如果出現錯誤,觸發器將被禁用。