トリガの再帰的な実行を防ぐ方法は?私は、アカウントのチャートで「ツリー可能」な説明を作成したいとしましょう。だから私は新しいレコードが挿入/更新されたときに、親レコードのdown_qty
を更新するので、更新トリガーが再帰的にトリガーされます。 -PostgreSQLの再帰トリガを防止する
は今、私のコードは大丈夫です、私は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]ツリー内部
Iループ、私は戻って、そのルートに各account_category
のdown_qty
までバブルする必要があります。たとえば、新しいアカウントカテゴリを挿入すると、account_category
という親のを増やす必要があります。同様に、アカウントカテゴリの親をaccount_category
に変更すると、account_category
の前の親のdown_qty
を減らす必要があります。account_category
私はできると思いますが、私はPostgreSQLに再帰トリガーをさせません。トリガ再帰深度レベルが16
レベルまでしか制限されていないところでMSSQLを使用しました。
私はあなたがどちらかを持っていない限り、再帰呼び出しの危険性がない限り、もう少し詳しく説明する必要があると思います:自分の親であるレコード、またはあなたのツリーの中のループ(ツリーではない)。 –