一尘不染

火鸟-插入或更新触发器后

sql

我的数据库中有一个计算,需要在更新触发器之后为“ table1”更新“ field1”。

更新该字段的问题将导致更新后触发器触发并执行冗长的过程并显示错误。

请告知在执行“更新后”触发器之后如何使“ field1”更新,而又不使“更新后”触发器再次执行。

我知道我不能将After触发器与NEW配合使用。

谢谢


阅读 169

收藏
2021-03-08

共1个答案

一尘不染

可以使用基于上下文变量的自定义锁定机制,以防止重复调用AFTER UPDATE触发器。

CREATE TRIGGER au FOR table
  AFTER UPDATE
  POSITION 0
AS
BEGIN
  IF RDB$GET_CONTEXT('USER_TRANSACTION', 'MY_LOCK') IS NULL THEN
  BEGIN
    RDB$SET_CONTEXT('USER_TRANSACTION', 'MY_LOCK', 1);

    ...
    Do your update operations here
    ...

    RDB$SET_CONTEXT('USER_TRANSACTION', 'MY_LOCK', NULL);
  END

  WHEN ANY DO
  BEGIN
    RDB$SET_CONTEXT('USER_TRANSACTION', 'MY_LOCK', NULL);
    EXCEPTION;
  END
END
2021-03-08