如何防止触发器的递归执行?假设我想在会计科目表上构建一个"可树"的描述.所以我要做的是,当插入/更新一个新记录时,我更新父记录的down_qty
,这样就会递归地触发更新触发器.
现在,我的代码还可以——我把这个放在UPDATE
触发器的第一行:
-- prevents recursive trigger
if new.track_recursive_trigger <> old.track_recursive_trigger then
return new;
end if;
当我需要更新父记录的数量时,这是触发器中的示例代码:
update account_category set
track_recursive_trigger = track_recursive_trigger + 1, -- i put this line to prevent recursive trigger
down_qty = down_qty - (old.down_qty + 1)
where account_category_id = m_parent_account;
我在想,在PostgreSQL中是否有一种方法可以在不引入新字段的情况下检测递归触发器,类似于MSSQL的trigger_nestlevel
.
[EDIT]
我在树里面循环,我需要把每一个account_category
中的down_qty
个吹回树根.例如,我插入一个新的帐户类别,它需要增加其父级account_category
的down_qty
,同样,当我更改帐户类别的父级account_category
时,我需要减少account_category
以前父级account_category
的down_qty
.虽然我认为可以,但我不会让PostgreSQL执行递归触发.我以前使用过MSSQL,其中触发器递归深度级别仅限于16
个级别.