2016-11-07 61 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