在每一行之后与每一行之前触发器(锁)
AFTER EACH ROW vs BEFORE EACH ROW Triggers (Locks)
在早期版本的 Oracle 文档中,有关于 BEFORE EACH ROW 和 AFTER EACH ROW 触发器的区别的说明(除了显而易见的,AFTER EACH ROW 触发器在 DML 已在该行上执行之后触发,您可以'更新 :new 伪记录)。 10g 文档中的注释指出:"Unlike BEFORE row triggers, AFTER row triggers lock rows." (Source)
但是,我在 12cR2 或 19c 文档中找不到相同的注释。所以,我有两个问题:
- 这在 12cR2/19c 中仍然适用吗?
- 提到的锁是不是在DML中获得的锁的扩展(或延迟释放)?或者,是触发器获取的单独的锁?
致对这个问题感兴趣的人。我向 AskTOM 提出了同样的问题并收到了回复。你可以找到它here
tl;dr:旧文档有误。锁是在BEFORE触发器之前获得的,所以所有触发器都受锁。
在早期版本的 Oracle 文档中,有关于 BEFORE EACH ROW 和 AFTER EACH ROW 触发器的区别的说明(除了显而易见的,AFTER EACH ROW 触发器在 DML 已在该行上执行之后触发,您可以'更新 :new 伪记录)。 10g 文档中的注释指出:"Unlike BEFORE row triggers, AFTER row triggers lock rows." (Source)
但是,我在 12cR2 或 19c 文档中找不到相同的注释。所以,我有两个问题:
- 这在 12cR2/19c 中仍然适用吗?
- 提到的锁是不是在DML中获得的锁的扩展(或延迟释放)?或者,是触发器获取的单独的锁?
致对这个问题感兴趣的人。我向 AskTOM 提出了同样的问题并收到了回复。你可以找到它here
tl;dr:旧文档有误。锁是在BEFORE触发器之前获得的,所以所有触发器都受锁。