2013-07-11 30 views
0

中在某些情況下,當一個記錄被插入到一個表中時,它應該被拆分成幾條記錄,而這些記錄將被插入。插入觸發器,其中INSERT語句在

該邏輯被寫入INSERT觸發器內,該INSERT觸發器在INSERT操作之前觸發。在這個觸發器的內部,我試圖執行一個INSERT語句,這個語句隨後導致一個遞歸的觸發器調用。不過,我不希望發生這種情況。我試圖禁用使用不便的身體觸發像

execute immediate 'ALTER TRIGGER sale_trigger DISABLE';

但是,很明顯這是一個提交操作,因此它從觸發器內不工作。

我該如何解決這個觸發器的遞歸調用?

編輯我宣佈我的觸發器爲declare PRAGMA AUTONOMOUS_TRANSACTION;,現在我可以運行alter聲明。但是,當我從同一觸發器中禁用觸發器時,PLSQL開發人員停止工作。我該怎麼辦? :)

+0

也許有一種方法,你如何理解觸發器被第二次調用,例如,從數據開始插入?所以你可以直接在觸發器中檢查,並且在第二次調用的情況下不會調用插入。 – Mikhail

+0

沒有找到一種方法來判斷觸發器是否是第一次被調用。分析數據似乎沒有幫助我的案例 – Dennis

+1

只有我找到的解決方法是目標表中的一個額外的列與一些默認值,這將不同的值插入通過觸發器,所以觸發器將檢查它並贏得'如果它與默認值不同,請插入。似乎並不好,但是,尤其是,如果你不能改變數據結構... – Mikhail

回答

0

而不是將第一個插入直接加載到您的目標表中,插入記錄到臨時表中。具有麻煩邏輯的觸發器應該放在臨時表上。如果邏輯不適用,則觸發器將該行插入到目標表中。如果該邏輯適用,觸發器將插入該行(如果需要?)並觸發需要額外插入目標表的任何內容。定期截斷登臺表以保持它的小巧和高效(但可能不會在每次觸發操作之後進行,因爲效率會更低)。

換言之:將觸發器從插入的表中解耦。

相關問題