Rekursionen in Triggern vermeiden

Themen rund um den praktischen Einsatz von Firebird. Fragen zu SQL, Performance, Datenbankstrukturen, etc.

Moderator: thorben.braun

Antworten
Benutzeravatar
martin.koeditz
Beiträge: 377
Registriert: Sa 31. Mär 2018, 14:35

Hallo zusammen,

kennt jemand einen eleganten Weg, um Rekursionen in Triggern zu vermeiden?

Konkret habe ich einen geänderten Datensatz A. Diese Änderungen werden an Datensatz B übertragen. Da sich B aber nun auch geändert hat, versucht dieser auch A zu ändern. Ich habe bislang keine charmante Lösung für diese Probleme. In MSSQL gibt es ja TRIGGER_NESTLEVEL().

In den Monitoring-Tabellen gibt es den CALL_STACK. Ich weiß aber nicht, ob mir das hier weiterhelfen kann. Hat jemand eine Idee?

Dank und Gruß
Martin
Martin Köditz
it & synergy GmbH
bfuerchau
Beiträge: 388
Registriert: Mo 7. Mai 2018, 18:09

Wie wäre es mit RDB$Set_Context und RDB$Get_Context?
Aber auch der Nested Level beim SQL-Server kann da durchaus negativ sein.
Denn eigentlich musst du nur den zu ändernden Inhalt prüfen bevor du einen Update machst.
Alternativ kannst du auch die Where-Klausel ja ergänzen:

... where key.... and Fx <> NeuerInhalt

Somit löst dieser Update dann keinen Trigger aus.
Benutzeravatar
martin.koeditz
Beiträge: 377
Registriert: Sa 31. Mär 2018, 14:35

Wie wäre es mit RDB$Set_Context und RDB$Get_Context?
Gute Idee.
Alternativ kannst du auch die Where-Klausel ja ergänzen:

... where key.... and Fx <> NeuerInhalt

Somit löst dieser Update dann keinen Trigger aus.
Manchmal ist es zu einfach... :D

Danke dir.
Martin Köditz
it & synergy GmbH
Antworten