2016-11-07 113 views
0

我有一個命令在修改表後在oracle觸發器內執行。 我需要這個命令運行一次(即使有100行更新),並且只有當有行更新時。僅當行更新時觸發觸發器

FOR EACH ROW只有當行更新時才能確保發送命令,那麼我怎麼能在第一次循環後停止執行呢?

+1

你正在尋找一個語句級觸發器:'每個statement' –

+0

語句級觸發器將被觸發一次,但即使沒有行更新...我只需確保在實際更新行時發送我的命令 – Djoz

+1

然後使用複合觸發器來計算修改的行數:http://docs.oracle.com/database/121/LNPLS /triggers.htm#CIHGJFAB –

回答

0

使用全局包變量。

1)在更新語句觸發器之前將其重置爲null。

2)保存值/在每一行觸發

3)INC櫃檯做最後的檢查更新語句觸發後,無論解僱你的邏輯精心一旦受影響的行

1

的數量看起來你要使用compound trigger。在for each row部分,你需要收集rowid s到更新和after statement運行整體更新

+0

複合觸發器已工作!但我不需要收集一些東西,我需要確保至少有一行更改並運行一次刷新命令。 – Djoz

+0

@DJozef我寫了關於通過比較':new <>:old'來收集更改行數來觸發代碼,當實際更新發生時不會更新到相同的值。但如果這對你來說足夠了,我很高興它有幫助。 – Kacper