對於同一張表,EachRow Trigger和Statement Trigger的前後被觸發順序是什麼?望高手點撥
環境: Oracle 9i,表:test,欄位;a1,a2,a3,a4,a5,a6,Trigger兩個:Eachrow和Statement,都是before insert&upate
目的; test中六個欄位a1,a2,a3,a4,a5,a6都必須是unique的,並且這六個欄位中的任何一個值都不允許出現在其他任何ROW的六個欄位中.不管是insert還是update都不被允許.
嘗試; 在before insert&update的時候觸發trigger,用:new.a1 (a2,a3,a4....)去比對目前table裡面所有行六個欄位中是否有相同的值.由於Eachrow trigger裡面無法對本表進行查詢,而statement trigger裡面無法使用:new,所以,我在eachrow trigger裡面把:new.a1.....等存入六個變量(這六個變量存在於一個package裡面),然後在statement trigger裡面讀取這些變量,然後拿來查詢當前表中是否有這些值已經存在.
問題: trigger建好第一次達到目的,從此以後無論insert或者update任何值,都會被trigger攔截.通過debug發現,只要package裡面的變量一次被賦值,就再也無法被重置.問題好像是先觸發了statement trigger,此時變量還為空,所以查詢表沒有發現重複紀錄,順利insert&update,然後觸發了eachrow trigger,結果把更新的數據放入變量裡面.Well...從此以後變量裡面永遠都是這次被賦的值;每次insert&update任何紀錄都被statement trigger攔截....
求助: 如果說確實是statement先於eachrow,那麼如何實現此功能?
感激涕零!在線等待高手!!