我有一個TABLE1。在這個表我創建了一個觸發器:插入,更新或AFTER DELETE如何防止未插入行時觸發插入觸發器?
現在,如果我做了一個插件,該插件不插入任何東西,觸發仍將被解僱:
insert into TABLE1 select * from TABLE1 where 1=0;
這個查詢將插入沒有行,但觸發器仍然被解僱。
有沒有辦法避免這種情況?這是正常的行爲嗎?
我有一個TABLE1。在這個表我創建了一個觸發器:插入,更新或AFTER DELETE如何防止未插入行時觸發插入觸發器?
現在,如果我做了一個插件,該插件不插入任何東西,觸發仍將被解僱:
insert into TABLE1 select * from TABLE1 where 1=0;
這個查詢將插入沒有行,但觸發器仍然被解僱。
有沒有辦法避免這種情況?這是正常的行爲嗎?
是的,這是正常的行爲。能夠避免,雖然這樣做需要具有3個觸發器:
聽起來像是矯枉過正?也許是:試圖用你的觸發器實現什麼?
這是正常行爲,Oracle期望插入行,因此即使未插入行,它也會觸發BEFORE INSERT和AFTER INSERT觸發器。 AFTER觸發器的目的之一是在語句成功後執行一些操作。這個語句成功:)
你可以指望的影響有一個包變量的行數:
mypackage.table1_nb_ins
變量爲0,在BEFORE INSERT觸發器,然後執行你的AFTER INSERT邏輯,如果你的計數器大於0
+1了不起的頭腦...... ;-) – 2010-06-25 13:30:33
行觸發gers
每當表受到觸發語句的影響時觸發行觸發器。例如,如果UPDATE語句更新表的多個行,則對UPDATE語句影響的每一行觸發一次行觸發器。如果觸發語句不影響行,則不會運行行觸發器。
https://docs.oracle.com/cd/B19306_01/server.102/b14220/triggers.htm
+1:打我吧:) – 2010-06-25 13:28:53
其實,我只是增加了對每一行和它解決了我的問題。我只需要在另一個表格中更新日期。即使每插入一行都觸發一次觸發器,在這種情況下,由於每次插入的行很少,因此無關緊要。但謝謝你的答案。我會嘗試如果我有性能問題。 – guigui42 2010-06-25 13:30:51