Wel*_*Wel 3 sql firebird triggers stored-procedures
我的数据库计算需要在更新触发器后更新"table1"的"field1".
更新该字段的问题将导致更新后触发器触发并执行冗长的过程并显示错误.
请告知如何在执行"更新后"触发器之后更新"field1",而不再使"更新后"触发器再次执行.
我知道我不能使用NEW和After触发器.
谢谢
可以使用基于上下文变量的自定义锁定机制来防止重复调用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)