firebird - 插入或更新触发器后

Wel*_*Wel 3 sql firebird triggers stored-procedures

我的数据库计算需要在更新触发器后更新"table1"的"field1".

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

请告知如何在执行"更新后"触发器之后更新"field1",而不再使"更新后"触发器再次执行.

我知道我不能使用NEW和After触发器.

谢谢

And*_*jeŭ 6

可以使用基于上下文变量的自定义锁定机制来防止重复调用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
Run Code Online (Sandbox Code Playgroud)